2014-04-01 22 views
0

我有兩列的文件和要打印僅當所確定的圖案沒有在第二列中找到的第一列排除一個限定圖案,該文件可以是例如:使用AWK

3 0. 
5 0. 
4 1. 
3 1. 
10 0. 

我想在第一列打印的值僅如果沒有在第二個文件的數量1,即

3 
5 
10 

我知道打印我可以使用第一列

awk '{print $1}' fileInput >> fileOutput 

是否有可能在某處有if塊?

回答

3

您可以添加條件$2 != "1."檢查第二列是1.與否:

$ awk '$2 != "1." {print $1}' file 
3 
5 
10 

當條件完成,{print $1}將被執行,那麼,你將有該文件的第一列。

+0

在這種情況下,這應該這樣做:''AWK – Jotne

+0

@Jotne我的想法正好 '$ 2 {打印$ 1}!'! –

+0

@Jotne是的,也考慮過它。如果第二列始終是一個數字,那麼它很好,但如果它是一個字符,它就會失敗。我猜'$ 2!= 1'更符合要求。 – fedorqui

2

在這種特殊的情況下,因爲1計算結果爲true0false,你可以這樣做:

awk '!$2 { print $1 }' file 
3 
5 
10 

的部分{ }之前是在其下命令的執行情況。在這種情況下,!$2意味着not列2是true(即列2是false)。

編輯:這仍然是這種情況,即使是尾隨點。事實上,所有這三個解決方案的工作:

bash-4.2$ cat file 
3 0. 
5 0. 
4 1. 
3 1. 
10 0. 
bash-4.2$ awk '!$2 { print $1 }' file  # treat column 2 as a boolean 
3 
5 
10 
bash-4.2$ awk '$2 != "1." {print $1}' file # treat column 2 as a string 
3 
5 
10 
bash-4.2$ awk '$2 != 1 {print $1}' file  # treat column 2 as a number 
3 
5 
10 
+0

@ziulfer我已經添加了一些例子來顯示每個選項的工作。 –

+0

我使用的是bash 3.2。 51,也許這就是問題所在...... – ziulfer

+0

@ziulfer我會說這取決於你的awk的版本。例如,'awk -W version'將'mawk 1.3.3'返回給我。 – fedorqui