我一直在尝试获取具有数字表的文本文件中的最大值和最小值。为了做到这一点,我使用打开文件中的每一列awk功能for循环。但我在下面遇到了这个错误。我是 awk 的初学者,我找不到问题所在。请帮帮我!
我陷入了这个问题:
awk: line 1 : syntax error at or near {
awk: line 1 : syntax error at or near }
awk: line 1 : syntax error at or near {
awk: line 1 : syntax error at or near }
这是我的脚本:
#!/bin/bash
for i in {1..11}
do
#print minimum value in the text file.
awk -F' ' '{print ${i}}' [filename].txt | sort -n | head -1
#print maximum value in the text file.
awk -F' ' '{print ${i}}' [filename].txt | sort -n | tail -1
done
答案1
鉴于您的 shell 脚本的结构,我假设您想要确定每列的最小值和最大值。这可以完全在 AWK 中完成:
#!/usr/bin/awk -f
BEGIN { delete mins; delete maxs }
{
for (i = 1; i <= NF; i++) {
if (!(i in mins) || $i < mins[i]) mins[i] = $i
if (!(i in maxs) || $i > maxs[i]) maxs[i] = $i
}
}
END {
for (i = 1; i in mins; i++) printf("%d ", mins[i])
print ""
for (i = 1; i in maxs; i++) printf("%d ", maxs[i])
print ""
}
这些BEGIN
行初始化空数组。
第二个块处理每一行,以及每一行中的每个字段。我们根据数组的键检查当前索引;如果我们还没有存储一个值,或者该值比存储的值更小(对于最小值)或更大(对于最大值),我们就会更新数组中的值。
该END
块显示结果,循环索引。