2017-04-26 46 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