2017-04-26 48 views
0

bash的新手。 我有一个文本文件test.txt,其中有两个密钥之一是user_type和其他是用户。目前USER_TYPE有两种类型的值或者“管理员”或“客户”和用户的可以使用Bash获取uniq元素并过滤值

cat man.txt|sort|uniq  
任何类型的值

 { user_type: admin 
     user: john  
      } 
    { user_type: guest 
     user: doe    
     } 

    {user_type: admin 
     user: test 
     } 

    { user_type: admin 
     user: something 
     } ........ 

我想在USER_TYPE得到uniq的值

但它似乎没有工作。

  1. 如何获得与user_type关键字相关联的uniq值? ?

2.How过滤用户的基础上的值和计数USER_TYPE值I具有带有值

阵列
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

感谢您指出。我修正了它 – guri

+0

您能解释更多关于2)数组是如何形成的,它不清楚 – Inian

+0

这是一个破碎的'JSON'文件,您试图在这里操作吗? – Inian

回答

1

如果你能肯定的是,文件在顺序总是线:user_typeuser,那么你可以这样做:

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