我希望从多行记录文件中过滤第二列中的最高分。我的方法就像:
awk ' BEGIN { RS=""; FS="\n"} {$2==max} {print $2}' file
样本看起来像
104 9
110 8
111 5
116 6
117 7
130 11
131 16
132 15
133 10
134 6
146 8
147 8
148 8
但我被第二行抓住了,因为RS ="&#34 ;; FS =" \ n" 。所以我的问题是,如何将多行记录字段拆分为子字段以进行最小 - 最大数学运算?
结果应该如下:
5
6
6
7
8
8
8
8
9
10
11
15
16
答案 0 :(得分:3)
您没有显示任何预期的输出,所以这是猜测,但这可能是您想要的:
$ cat tst.awk
BEGIN { RS=""; FS="\n" }
{
for (i=1;i<=NF;i++) {
split($i,a,/ /)
max = ( (i==1) || (a[2] > max) ? a[2] : max )
}
print max
}
$ awk -f tst.awk file
9
8
7
16
8
答案 1 :(得分:1)
我可能不会担心弄乱RS
和FS
这个问题。沿着这些方向的东西可能更容易:
awk 'BEGIN { max = -10000000 } NF == 2 { if ($2 > max) max = $2 } NF < 2 { print max; max = -10000000 }' file
如果文件末尾不是空行,您可能需要添加END { print max }
子句以获取最后一组的输出...