たとえば、次のような入力テキストファイル(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'
、誰もがこれを説明できますか?
本当に$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
の値は変更されません。
awkで
$0
は行全体ですしたがって
$1" "$1*$2" "$3*$4
は、3つのフィールド$1
、$1*$2
、$3*$4
を作成します$0=
結果は行に入れられ、 編集:
$0=
を省略した場合、出力行は変更されません。
Steeldriverが指摘したように、検索は肯定的であるため、行はprinetdです。