bash的新手。 我有一个文本文件test.txt,其中有两个键,一个是 user_type ,另一个是用户。目前 user_type 有两种类型的值:“admin”或“guest”, user 可以包含任何类型的值
{ user_type: admin
user: john
}
{ user_type: guest
user: doe
}
{user_type: admin
user: test
}
{ user_type: admin
user: something
} ........
我正在尝试使用
在 user_type 中获取uniq值 cat man.txt|sort|uniq
但它似乎不起作用。
2.如何根据用户过滤值并计算 user_type 值?我有一个具有值的数组
array = (doe,test) #This array can have any values from the user values of man.txt
注意:此数组是根据api请求生成的,该请求具有选择“用户”的一些标准,我只想计算与数组中的值相关联的user_type值
现在我只想要与该数组关联的 user_type 值。 并计算 user_types 值,表示重复特定类型的次数。
for i in ${array[@]};do
grep -c $i man.txt
但它正在返回输出:
user:doe
or user:test
但它不返回user_type的特定值的计数?
答案 0 :(得分:1)
如果您可以确定该文件的行总是按顺序排列:user_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_type
输出,输出到sort
并使用uniq
计算行数。< / p>