awk:第 1 行:{ 处或附近的语法错误

awk:第 1 行:{ 处或附近的语法错误

我一直在尝试获取具有数字表的文本文件中的最大值和最小值。为了做到这一点,我使用打开文件中的每一列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块显示结果,循环索引。

相关内容