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)。
我正在编写一个 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)。