awk:行1:{またはその付近で構文エラーが発生しました。

awk:行1:{またはその付近で構文エラーが発生しました。

数値表を含むテキストファイルから最大値と最小値を取得しようとしました。これを行うには、次のようにファイルの各列を開きます。アッ機能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

シェルスクリプトの構造を考慮して、各列の最小値と最大値を決定したいとします。これは完全に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行は空の配列を初期化します。

2番目のブロックは、各行と各行の各フィールドを処理します。まだ値を保存していない場合、または値が保存された値より小さい(最小値)大きい場合(最大値)、配列のキーと比較して現在のインデックスを確認します。配列の値です。

このENDブロックは結果であるループインデックスを表示します。

関連情報