2017-09-13 47 views
1

我寫一個bash腳本,我有一個這樣的文件:選擇與uniq的數量等於行的最後一個領域一個

 3 5d74727d50368c4741d76989586d91de ./2.txt 
     3 63ce7868edd509987925e98e129e232a ./3.txt 
     2 9fc16dbef316035af400fac82aba9c36 ./fff/fff/fff/fff 
     3 d41d8cd98f00b204e9800998ecf8427e ./1 
     1 d41d8cd98f00b204e9800998ecf8427e ./11.txt 
     3 d41d8cd98f00b204e9800998ecf8427e ./12/1 
     3 d41d8cd98f00b204e9800998ecf8427e ./12/1.txt 
     3 d41d8cd98f00b204e9800998ecf8427e ./12/2.txt 
     1 d41d8cd98f00b204e9800998ecf8427e ./13 
     3 d41d8cd98f00b204e9800998ecf8427e ./4.txt 
     3 d41d8cd98f00b204e9800998ecf8427e ./5.txt 
     1 d41d8cd98f00b204e9800998ecf8427e ./6.txt 
     3 d41d8cd98f00b204e9800998ecf8427e ./ala 
     1 d41d8cd98f00b204e9800998ecf8427e ./a.txt 
     3 d41d8cd98f00b204e9800998ecf8427e ./b/c/d/e/f/ass 
     3 d41d8cd98f00b204e9800998ecf8427e ./kota 
     1 d41d8cd98f00b204e9800998ecf8427e ./ma 
     2 d41d8cd98f00b204e9800998ecfkkkkk ./6.txt 
     2 d41d8cd98f00b204e9800998ecflllll ./a.txt 
     2 d41d8cd98f00b204e9800998ecfmmmmm ./ma 

這是一個該命令的作用:

cat file1 file2 file2 | sort | uniq -c

現在我想選擇與計數等於1行,然後僅打印該行的最後一個字段,從而所希望的效果將是:

./11.txt 
./13 
./6.txt 
./a.txt 
./ma 

我對bash不太舒服,我想知道是否有一個簡單的解決方案。

回答

2

可以在Awk僅僅作爲

awk '$1=="1"{print $NF}' file 

意義爲此,在Awk$1是由分隔符分割每行的第一場(如果沒有其他選項都設置一個空白是默認設置) 。我們期待到含有第一場爲1線,並在這些線路的行動條款是打印的最後一個字段(由$NFAwk表示)

+1

完美的作品!謝謝! – madasionka

1

嘗試以下也曾經讓我知道,如果這可以幫助你。

awk '{printf("%s",$1==1?$NF RS:"")}' Input_file 

用printf打印,檢查那裏,如果第一個字段是1,則打印帶有新的生產線最後一列(RS是記錄分隔符,其默認值爲新行)其他打印「」(NULL)。

+1

很棒!謝謝! – madasionka

相關問題