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