使用相同的“打印多行”;“最大的”;使用awk的值

使用相同的“打印多行”;“最大的”;使用awk的值,awk,Awk,我有一个文件如下所示: 3, abc, x 2, def, y 3, ghi, z 我想在$1中找到最高值,并打印$1中包含此最高值的所有行 sort -t, -k1,1n| tail -n1 只需在$1中给出包含3的一行,但我需要两行 如果您有任何建议,我将不胜感激(:我不确定这是否是获取行的最佳方法,因为它们与awk具有相同的价值,但是: awk 'NR == 1 { t = $1; print } NR > 1 { if (t != $1) { exit; } print }'

我有一个文件如下所示:

3, abc, x
2, def, y
3, ghi, z
我想在
$1
中找到最高值,并打印
$1
中包含此最高值的所有行

sort -t, -k1,1n| tail -n1
只需在
$1
中给出包含3的一行,但我需要两行


如果您有任何建议,我将不胜感激(:

我不确定这是否是获取行的最佳方法,因为它们与awk具有相同的价值,但是:

awk 'NR == 1 { t = $1; print } NR > 1 { if (t != $1) { exit; } print }'
它可以与排序组合,如下所示:

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 }'

我不确定这是否是获取行的最好方法,因为它们与awk具有相同的值,但是:

awk 'NR == 1 { t = $1; print } NR > 1 { if (t != $1) { exit; } print }'
它可以与排序组合,如下所示:

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 }'

这里是另一种不需要排序的方法,但需要对数据进行两次传递

max=$(awk -F',' '{if(max < $1) max = $1}END{print max}' Input.txt )
awk -v max=$max -F',' '$1 == max' Input.txt 
max=$(awk-F','{if(max<$1)max=$1}END{print max}Input.txt)
awk-v max=$max-F',''$1==max'Input.txt

这里是另一种不需要排序的方法,但需要对数据进行两次传递

max=$(awk -F',' '{if(max < $1) max = $1}END{print max}' Input.txt )
awk -v max=$max -F',' '$1 == max' Input.txt 
max=$(awk-F','{if(max<$1)max=$1}END{print max}Input.txt)
awk-v max=$max-F',''$1==max'Input.txt

在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
$awk-F,'
$1>m{#当找到新的最大值时
删除a;m=1;i=0#全部重置
}
如果$1等于max或者我们正在处理第一条记录,则a[1]==“”| |$1==m{#
a[++i]=$0#将记录存储到
}         
最后{#

对于awk中的(j=1;j),只有一次通过数据:

$ 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
$awk-F,'
$1>m{#当找到新的最大值时
删除a;m=1;i=0#全部重置
}
如果$1等于max或者我们正在处理第一条记录,则a[1]==“”| |$1==m{#
a[++i]=$0#将记录存储到
}         
最后{#
对于(j=1;j