2013-11-27 87 views
0

我在比較同一文件的兩列面臨的一個問題,然後對另一個慶典在

例如基礎更換一列的值相同的文件上多列的工作,我的文件是這樣的:

name col1 col2 
abc no no 
xyz yes yes 
man no no 
wrr no no 

在這裏,我要檢查每一個文件的COL1我想改變COL2爲「N/A」

回答

5
$ awk '$2=="no"{$3="N/A"}1' file 
name col1 col2 
abc no N/A 
xyz yes yes 
man no N/A 
wrr no N/A 
+1

你能否解釋一下呢? '1'到底做了什麼? – pfnuesel

+0

這是顯示當前行的神祕方式。我真的應該把'{print}'代替爲了可讀性,但是試圖儘可能簡潔。 – jlliagre

+0

我認爲字段分隔符是\ t,不是一個簡單的空格。所以你應該在這種情況下使用-F選項。 –

0

的價值使用sed「不」值:

[ ~]$ sed "s/\([A-Za-z]*\ *no\ *\).*/\1N\/A/g" file 
name col1 col2 
abc no N/A 
xyz yes yes 
man no N/A 
wrr no N/A 

使用awk

[ ~]$ awk '$2 == "no" {$3="N/A"} {print $1"\t"$2"\t"$3}' file 
[ ~]$ awk '$2 == "no" {$3="N/A"} {print $1" "$2" "$3}' file 
# ... 
0

這是一個awk問題:

[ ~]$ awk '$2 == "no" {$3="N/A"} {print}' file 
name col1 col2 
abc no N/A 
xyz yes yes 
man no N/A 
wrr no N/A 

你也可以,只要你想改變你的顯示器

cat your-file.txt | awk '{if ($2 == "no") { $3 = "N/A"; } print $0 }' > your-new-file.txt 
+3

無用的使用'cat' –

+0

舊的habbits ... awk很少是流水線中唯一的流編輯器;) – smassey

+0

即使你使用「cat」也很少有用多個管道;) –

0

下面是一個簡單的解決方案:

while read name col1 col2 ; do 
    if[[ "$col" = no ]]; then 
     echo "$name $col1 N/A" 
    else 
     echo "$name $col1 $col2" 
    fi 
done < file 

如果你需要更快,使用這個腳本awk

$1 == "no" { print $1" "$2" N/A"; next; } 
{ print; }