
次のような入力テキスト ファイル (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*$4
3つのフィールドを作成し$1
、$1*$2
$3*$4
$0=
結果は行に配置され、暗黙的に印刷されます(編集を参照)。
編集 :
を省略すると$0=
、出力行は変更されません。
Steeldriver が指摘したように、検索は肯定的なので、行が印刷されます。