web-dev-qa-db-ja.com

awkで$ 0 = $ 1はどういう意味ですか?

たとえば、次のような入力テキストファイル(sample_simple.txt)があるとします。

3 1 10 1 6
9 4 2  4 1
9 2 2  2 1

コマンドを使用して:awk '$0=$1" "$1*$2" "$3*$4' sample_simple.txt、次の出力が表示されます。

3 3 10
9 36 8
9 18 4

次に、次のコマンドを使用します:awk '$1*$2" "$3*$4' sample_simple.txt、入力ファイルから何も変更されません:

3 1 10 1 6
9 4 2  4 1
9 2 2  2 1

コマンド間の唯一の変更は'$0=$1'、誰もがこれを説明できますか?

9
ADNAN ZAMAN

本当に$0=$1ではありません。もっと考える

$0 = ($1" "$1*$2" "$3*$4)

そう

$0=$1" "$1*$2" "$3*$4

文字列連結$1" "$1*$2" "$3*$4の結果を変数$0に割り当て、デフォルトのアクション{print $0}を実行しますが、

 $1*$2" "$3*$4

結果は空ではない文字列であるため、$1*$2$3*$4の結果を連結し(間にスペース" "がある)、デフォルトのアクション{print $0}を実行します。 $0の値は変更されません。

17
steeldriver

awkで

  • $0は行全体です
  • ラインはその場で変更できます

したがって

  • $1" "$1*$2" "$3*$4は、3つのフィールド$1$1*$2$3*$4を作成します
  • $0=結果は行に入れられ、 暗黙的に印刷された (編集を参照)。

編集:

$0=を省略した場合、出力行は変更されません。

Steeldriverが指摘したように、検索は肯定的であるため、行はprinetdです。

8
Archemar