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連接and的結果$3*$4(之間有空格" ")並執行預設操作,{print $0}因為結果是非空字串。的值$0不被修改。

答案2

在 awk 中

  • $0是整行
  • 線路可以即時更改

因此

  • $1" "$1*$2" "$3*$4建立 3 個字段$1$1*$2並且$3*$4
  • $0=結果被放入該行,並隱式列印(參見編輯)。

編輯 :

如果省略$0=,輸出行不會改變。

正如 Steeldriver 指出的那樣,由於搜尋是肯定的,因此線路將被列印。

相關內容