使用相同的“打印多行”;“最大的”;使用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