2017-09-13 58 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

相关问题