使用相同的"最大的"打印多行。使用awk的价值

时间:2017-04-03 03:01:12

标签: awk

我有一个看起来像这样的文件:

3, abc, x
2, def, y
3, ghi, z

我想找到$1中的最高值,并打印$1中包含此最高值的所有行。

sort -t, -k1,1n| tail -n1

只会在$1中给出一个包含3的行,但我需要两个。

感谢任何建议(:

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