awk在列之间做数学运算

awk在列之间做数学运算,awk,Awk,我想从多行记录文件的第二列中筛选出最高分数。我的方法是: 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=“”;FS=“\n”。所以我的问题是,如何将一个多行记录字段拆分成子字段来进行最小-最大运算 结果应该如下所

我想从多行记录文件的第二列中筛选出最高分数。我的方法是:

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=“”;FS=“\n”。所以我的问题是,如何将一个多行记录字段拆分成子字段来进行最小-最大运算

结果应该如下所示:

 5
 6
 6 
 7
 8
 8
 8
 8
 9
 10
 11
 15
 16

对于这一个,我可能不会担心弄乱
RS
FS
。沿着这些思路做的事情可能更容易:

awk 'BEGIN { max = -10000000 } NF == 2 { if ($2 > max) max = $2 } NF < 2 { print max; max = -10000000 }' file
awk'BEGIN{max=-10000000}NF==2{if($2>max)max=$2}NF<2{print max;max=-10000000}文件

如果文件末尾没有空行,您可能需要添加一个
end{print max}
子句来获取最后一个组的输出…

您没有显示任何预期的输出,因此这是一个猜测,但这可能是您想要的:

$ 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
$cat tst.awk
开始{RS=”“;FS=“\n”}
{
对于(i=1;i max)?a[2]:max)
}
打印最大值
}
$awk-f tst.awk文件
9
8.
7.
16
8.

请显示此示例输入的所需输出。5 6 6 7 8 8 8 9 10 11 15 16read@EdMorton是的,但在提供的示例输入中,所有内容似乎都是正整数,因此即使
-1
也足够了,我选择让代码部分稍微简单一点。我确实提到了可能需要
END…
,这取决于末尾是否有空行。这只是另一个例子,说明通常可以采取几种不同的方法……为max设置一个任意低的数字是不好的编码实践<代码>awk'NF{max=max~/././| | 256 6 7 8 8 8 8 9 10 11 15 16两年半后,你认真回答了你的问题吗???祝你好运!我意外发现了这种差异。但谢谢你的回答,让我这一周过得很愉快。不客气。看看下一步该怎么办。