2012-02-18 10 views
16

私はawkを使用することを学びたいと思っていますが、それは私の予想どおりの動作ではありません。ここに私のトラブルがあります:なぜawkは最初のフィールドの代わりに行全体を出力しますか?

これは最初のフィールドなので、私は "Hello"が見えます。スペースがフィールド区切り文字として数えられないのはなぜですか?

+4

だから、あなたがawkのプログラミングよりもシェルプログラミングについての詳細を学んだとして翻訳ます。これまでの回答は注目されています。非常に合理的な理由がない限り、スクリプトの周りには常に単一引用符を使用してください。 –

答えて

26

バッシュは、第1のシェルの引数を参照するものとして$1解釈されるので、それはですので、その値に置き換えられます。あなたのケースでは、そのパラメータが設定されていないので、$1は空の文字列に置き換えられます。 AWKプログラムは実際には{print }となり、行全体が出力されます。

単一引用符の代わりに二重引用符であなたのAWKプログラムをラップ、これをやってからバッシュを防止するために:

echo "Hello brave new world" | awk '{print $1}' 

または

echo 'Hello brave new world' | awk '{print $1}' 
7
echo "Hello brave new world" | awk '{print $1}' 

使用awkプログラムの周りに単一引用符、そうでない場合は$ 1シェル変数$ 1

関連する問題