2012-03-23 39 views
1

我使用了來自this問題的awk one liner來解決類似的問題。但是,並不真正瞭解Awk,我不知道它是如何工作的。任何人都可以解釋腳本如何運作?我想了解它,所以我可以在不同的情況下應用它。Awk:根據來自另一個文件的輸入替換列中的值

下面是從鏈接一個班輪:

awk 'FNR==NR{a[NR]=$3;next}{$2=a[FNR]}1' f2 f1 

我知道,它FNR=NR一部分就是確保在文件中的一個行中的文件被匹配到相同的2號線和明顯$ 3和$ 2分別對應第三和第二個字段。但是我對代碼結尾處的「1」感到困惑,我對「a」感到困惑。我假設它代表文件名。

+0

的'A'是數組變量的名稱。 '1'是'{print}'的簡寫' – potong 2012-03-23 16:35:12

回答

2

awk會逐行處理每個文件。 Awk將跟蹤當前文件中的當前行號(FNR變量)以及目前爲止所看到的行總數(NR變量)。條件FNR==NR只能在awk正在讀取第一個文件時爲true。

a[NR]=$3設置在NR索引到保持第三字段的值的數組元素。

一個awk程序主要由condition {action}對組成。對於當前行,檢查每個條件,如果爲true,則執行操作塊。如果缺少條件,則會執行操作塊 - {$2=a[FNR]}塊的情況就是如此。如果條件是存在的,但動作塊不存在,則默認操作是打印$ 0,這是任何變換後的當前行。由於非零數字是等同於真實的,那麼1指示awk來爲每一行執行的默認操作。

第一個文件未被打印的原因是由於第一個塊中的next指令。

+0

謝謝!我讚賞詳細的答案。這爲我清除了一些東西。 – 2012-03-23 20:45:03

相關問題