好的,所以我不确定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个元素只能是1
或0
。
我想要打印的是第5个字段上每次最后出现的值。
仅在第5个字段没有加上之前的行中的值时打印。
答案 0 :(得分:1)
我认为awk是正确的工具:
awk '$5 != last; {last = $5}' last=-1 input
请注意,如果第5个字段与'之前的行中的值不匹配,则会打印一行,但不会打印每个最后一次出现的值'。但我并不完全理解你问题中的倒数第二句,所以我忽略了它,因为它似乎与问题的最后一句相矛盾。
如果您想要的是仅在下一行的第5个字段不同时打印一行,请尝试:
awk '$5 !=b && NR>1{print a} {a=$0; b=$5}' input