2016-08-18 20 views
2

我試圖替換文件中的特定列,讓我們假設在test.txt中的第三列。Awk替換不在「if」語句中工作

創建test.txt

echo "1 2 -1" > test.txt 
echo "3 4 +1" >> test.txt 

如果我做一個簡單的替換,它的工作原理:

awk '$3="cows"' test.txt 

1 2 cows 
3 4 cows 

但是,如果我使用條件來改變輸出,我什麼也沒有:

awk '{ 
if ($3 == "+1") 
    $3="cows"; 
else if ($3 == "-1") 
    $3="sheep"; 
}' test.txt 

我在這裏錯過了什麼?謝謝!

+2

'print'語句。 –

+0

您的輸入使用'+ 1'。你的awk使用'1'。這是否解釋了什麼? – John3136

+0

感謝您指出了John3136,我解決了這個問題。 – chimeric

回答

2

Awk程序由條件和動作組成,格式爲condition { action }

awk有一個默認的動作,它是打印當前行。

在你的第一個程序中的分配是條件,不是動作,因爲沒有花括號。因此將執行默認操作。

在你的第二個程序中,你已經定義了一個動作,它取代了默認動作。因此,print不再執行,你必須自己動手。

+0

謝謝!那讓我瘋狂。 – chimeric

0

你們是對的,這裏是正確的格式。

awk '{ 
    if ($3 == "+1") 
     $3="cows"; 
    else if ($3 == "-1") 
     $3="sheep"; 
    print 
    }' test.txt