【问题标题】:print only if value in field does not match previous line仅当字段中的值与上一行不匹配时才打印
【发布时间】:2014-05-18 14:56:31
【问题描述】:

好的,所以我不确定 gawk 是不是这里最好的工具,所以如果有人有使用 perl、sed、uniq 的简单方法,我会很高兴使用它。我正在尝试过滤一组如下所示的数据:

"1" "ARI201304010" "SLN" 1 0 0 1
"2" "ARI201304010" "SLN" 1 0 1 1
"3" "ARI201304010" "SLN" 1 0 1 3
"4" "ARI201304010" "SLN" 1 0 1 0
"5" "ARI201304010" "SLN" 1 0 2 1
"6" "ARI201304010" "SLN" 1 1 0 1
"7" "ARI201304010" "SLN" 1 1 0 0
"8" "ARI201304010" "SLN" 1 1 1 0
"9" "ARI201304010" "SLN" 1 1 2 2
"10" "ARI201304010" "SLN" 2 0 0 0

第 5 个元素只能是 10。 我想打印的是第 5 个字段上最后一次出现的值。 仅当第 5 个字段与前一行中的值不匹配时才打印。

【问题讨论】:

    标签: perl sorting unix sed gawk


    【解决方案1】:

    我认为 awk 正是正确的工具:

     awk '$5 != last; {last = $5}' last=-1 input
    

    请注意,这会打印一行“如果第 5 个字段与前一行中的值不匹配”,但不会“打印每个最后出现的值”。但是我不完全理解您问题中的倒数第二句话,因此我忽略了它,因为它似乎与问题的最后一句话相矛盾。

    如果您只想在下一行的第 5 个字段不同时打印一行,请尝试:

     awk '$5 !=b && NR>1{print a} {a=$0; b=$5}' input
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-28
      • 2021-09-05
      相关资源
      最近更新 更多