Select uniq 计数等于 1 的行的最后一个字段

Select the last field of a line with uniq count equal to one

我正在编写一个 bash 脚本并且我有一个这样的文件 :

      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

现在我想 select 计数等于 1 的行,然后仅打印该行的最后一个字段,因此所需的效果将是:

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

我对 bash 不太满意,我想知道是否有一个简单的解决方案。

您可以在 Awk 中做到这一点,就像

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

意思是,在 Awk</code> 是每行中由定界符分隔的第一个字段(如果没有设置其他选项,则单白-space 为默认值)。我们查看包含第一个字段的行 <code>1,在这些行中,操作子句是打印最后一个字段(由 Awk 中的 $NF 表示)

尝试关注一次,如果这对您有帮助,请告诉我。

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

使用 printf 打印,如果第一个字段为 1 则打印最后一列换行(RS 是记录分隔符,默认值为换行)否则打印 ""(NULL)。