Bash获取uniq元素并过滤值

时间:2017-04-26 05:47:12

标签: arrays linux bash shell unix

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    

但它似乎不起作用。

  1. 如何获取与user_type键关联的uniq值?
  2. 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的特定值的计数?

1 个答案:

答案 0 :(得分: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计算行数。< / p>