0

私はシェルスクリプトとbashをまったく初めて使用します。私の質問は、awk が stdin からのデータを解釈するのと同じように、改行を含む変数を awk に解釈させるにはどうすればよいですか?

例:

fileData=`cat /path/to/file`
echo $fileData | awk '{print $1}'

上記のコードを実行すると、次のエラー メッセージが表示されます。awk: program limit exceeded: maximum number of fields size=32767これは明らかに、awk が$fileData一度に 1 行ずつではなく、すべての行を同時に解釈することを意味します。

awkに変数から一度に1行ずつ解釈させる方法は?

4

1 に答える 1

1

あなたの質問を正しく理解していれば、あなたの問題はawk、とは関係がなく、シェルの空白の分割と関係があるのではないかと思います。あなたの問題は、シェルが$fileData空白フィールドの区切り文字として内部の新しい行を取得したことです。それを防ぐには:

echo "$fileData" | awk '{print $1}'

たとえば、連想配列を使用して環境変数( export fileData)に直接アクセスすることもできますが、メモリを破壊するリスクがあるため、ファイルの内容全体を変数に格納することはおそらく悪い戦略です。awkenvironenviron["fileData"]

ちなみに、あなたのコードが単なる例であることを願っています。

awk '{print $1}' /path/to/file

非常に好ましい。そのまま:

fileData=$(cat /path/to/file)

バックティックを使いすぎます(ただし、cat必要になることはめったにありません)。

于 2012-09-23T08:05:54.193 に答える