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

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'、誰かこれを説明できますか?

答え1

それは本当$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

答え2

awkで

  • $0全行です
  • ラインはオンザフライで変更できます

したがって

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

編集 :

を省略すると$0=、出力行は変更されません。

Steeldriver が指摘したように、検索は肯定的なので、行が印刷されます。

関連情報