我有一个看起来像这样的文件:
3, abc, x
2, def, y
3, ghi, z
我想找到$1
中的最高值,并打印$1
中包含此最高值的所有行。
sort -t, -k1,1n| tail -n1
只会在$1
中给出一个包含3的行,但我需要两个。
感谢任何建议(:
答案 0 :(得分:2)
我不确定这是获取线条的最好方法,而它们与awk具有相同的值,但是:
awk 'NR == 1 { t = $1; print } NR > 1 { if (t != $1) { exit; } print }'
可与sort
结合使用,如下所示:
sort -t, -k1,1nr | awk 'NR == 1 { t = $1; print } NR > 1 { if (t != $1) { exit; } print }'
还有这个,但它做了不必要的工作:
sort -t, -k1,1nr | awk 'NR == 1 { t = $1 } t == $1 { print }'
答案 1 :(得分:0)
这是另一种不需要排序的方法,但需要对数据进行两次传递。
max=$(awk -F',' '{if(max < $1) max = $1}END{print max}' Input.txt )
awk -v max=$max -F',' '$1 == max' Input.txt
答案 2 :(得分:0)
在awk中,只有一次传递数据:
$ awk -F, '
$1>m { # when new max is found
delete a; m=$1; i=0 # reset all
}
a[1]=="" || $1==m { # if $1 equals max or we're processing the first record
a[++i]=$0 # store the record to a
}
END { # in the end
for(j=1;j<=i;j++)
print a[j] # print a with stored records
}
' file
3, abc, x
3, ghi, z