Arrays Bash获取uniq元素并过滤这些值
bash新手。 我有一个文本文件test.txt,其中有两个键,一个是user\u type,另一个是user。目前,user\u type有两种类型的值“admin”或“guest”,并且user可以有任何类型的值Arrays Bash获取uniq元素并过滤这些值,arrays,linux,bash,shell,unix,Arrays,Linux,Bash,Shell,Unix,bash新手。 我有一个文本文件test.txt,其中有两个键,一个是user\u type,另一个是user。目前,user\u type有两种类型的值“admin”或“guest”,并且user可以有任何类型的值 { user_type: admin user: john } { user_type: guest user: doe } {user_ty
{ user_type: admin
user: john
}
{ user_type: guest
user: doe
}
{user_type: admin
user: test
}
{ user_type: admin
user: something
} ........
我正在尝试使用
cat man.txt|sort|uniq
但它似乎不起作用
array = (doe,test) #This array can have any values from the user values of man.txt
注意:这个数组是从一个api请求生成的,该请求有一些选择“用户”的标准,我只想计算与数组中的值关联的用户类型值
现在我只需要与该数组关联的user\u type值。
并计算特定类型重复多少次的用户类型值
for i in ${array[@]};do
grep -c $i man.txt
但它正在恢复产出:
user:doe
or user:test
但是它不会返回user\u type的特定值的计数?如果您可以确定文件中的行始终按顺序排列:
user\u type
,user
,那么您可以执行以下操作:
array=("test" "doe")
for username in "${array[@]}"; do
grep -B1 "$username" man.txt | grep -o 'user_type:.*' | sort | uniq -c
done
其中,
grep-B1
在匹配上方输出一行,然后我们匹配该行以仅获得user\u type
输出,通过管道传输到sort
,并使用uniq
计算行数。感谢您指出。我修复了它。您可以解释更多关于2)数组是如何形成的,不清楚的是,这是一个破碎的JSON
文件吗?我解释了数组的形成。实际上,JSON文件是由我使用“一些API请求”| jq.[]从API请求生成的。{“user|type”:.user|type,“user”:.group.user}如果你对jq
感到满意,那么为什么要使用grep
?