我有一个问题在这里得到了回答awk-打印在初始分析中发现的包含最大值的所有行,但现在需要对其进行调整,以适应行之间有U+2500 unicode字符的情况。
问题如下,我有一个新的条目文件如下:
0.0008 6
────────────
9.0 10
────────────
9.0 19
────────────
0.7 33
如果我试图使用awk的答案找到最大值-打印包含初始分析中发现的最大值的所有行,输出总是如下所示:
──────
──────
──────
这不是预期的退出,但我应该得到这样的东西:
9.0 10
9.0 19
注意:创建此问题是为了不影响对标记为"的解决方案的选择;已解决";在awk中-打印包含初始分析中发现的最大值的所有行。
您也可以使用这个2遍awk:
awk '$1+0 != $1 {next} FNR==NR {if (max < $1) max=$1; next} $1 == max' file{,}
9.0 10
9.0 19
我们在第一阶段计算最大值,忽略$1
为非数字的所有行,然后在第二阶段打印$1
与max
值相同的所有记录。
使用您显示的示例,请尝试以下操作。用GNUawk
编写和测试。
awk '
$1+0==$1{
max=(max>$1?max:$1)
arr[$1]=(arr[$1]?arr[$1] ORS:"")$0
}
END{
print arr[max]
}
' Input_file
说明:添加对上述解决方案的详细说明。
awk ' ##Starting awk program from here.
$1+0==$1{ ##Checking condition if 1st field is an integer.
max=(max>$1?max:$1) ##Create max variable by having maximum value out of 1st field and max variable here.
arr[$1]=(arr[$1]?arr[$1] ORS:"")$0 ##Create array with index of $1 and keep adding its value to it wit same index values.
}
END{ ##Starting END block of this program from here.
print arr[max] ##Printing array arr value with key of max here.
}
' Input_file ##Mentioning Input_file name here.
注:根据@karafka的建议,添加$1+0==$1
,以便科学记数法,负数不会错过