【问题标题】:Select the last field of a line with uniq count equal to one选择 uniq 计数等于 1 的行的最后一个字段
【发布时间】:2017-09-13 14:19:42
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: bash awk uniq


    【解决方案1】:

    您可以在Awk 中这样做

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

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

    【讨论】:

    • 完美运行!谢谢!
    【解决方案2】:

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

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

    使用 printf 打印,检查第一个字段是否为 1,然后用新行打印最后一列(RS 是记录分隔符,默认值为新行)否则打印“”(NULL)。

    【讨论】:

    • 效果很好!谢谢!
    猜你喜欢
    • 1970-01-01
    • 2012-04-03
    • 2018-08-01
    • 2011-04-12
    • 2020-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多