我有一个文件,其中的行如下:
5 3 6 4 2 3 5
1 4 3 2 6 5 8
..
我想获得每行的最小值,例如,使用上面给出的输入,我应该得到:
min of first line: 2
min of second line: 1
..
如何使用 awk 对每行中任意数量的列执行此操作?
如果您不介意使用数字而不是单词的输出,您可以使用这一行:
$ awk '{m=$1;for(i=1;i<=NF;i++)if($i<m)m=$i;print "min of line",NR": ",m}' file
min of line 1: 2
min of line 2: 1
如果你真的想计算序数:
BEGIN {
split("first second third fourth",count," ")
}
{
min=$1
for(i=1;i<=NF;i++)
if($i<min)
min=$i
print "min of",count[NR],"line: \t",min
}
将其保存script.awk
并运行如下:
$ awk -f script.awk file
min of first line: 2
min of second line: 1
显然,这仅适用于最多 4 行的文件,但只需将序数列表增加到您认为需要的最大数量。您应该可以很容易地在网上找到一份清单。
你的问题很简单。您需要做的就是min
在脚本的BEGIN
一部分中定义一个变量,并且在每一行,您只需对最小元素执行一个简单的类似 C 的算法(将第一个字段设置为min
,然后使用下一个字段,依此类推,直到到达该行的最后一个字段)。由于变量 NF,您将知道该行中的字段总数。因此,只需编写一个 for 循环即可。一旦为该行完全执行了 for 循环,您将拥有最小的元素,您可以打印它。