
假設我有一個輸入文字檔案 (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 指出的那樣,由於搜尋是肯定的,因此線路將被列印。