2017-04-07 109 views
0

假設我有一個文件:替換爲「NA」重複變量用awk

1 Blue 
2 Red 
3 Yellow 
4 Yellow 
5 Yellow 
6 Purple 
7 Purple 
8 Green 

而且我想獲得以下文件,通過「NA」

1 Blue 
2 Red 
3 Yellow 
4 NA 
5 NA 
6 Purple 
7 NA 
8 Green 

回答

5
代替重複的變量

試試這個 -

$ awk 'a[$2]++{$2="NA"} 1' f 
1 Blue 
2 Red 
3 Yellow 
4 NA 
5 NA 
6 Purple 
7 NA 
8 Green 
0
awk '{ if ($2 == COLOR) {print $1, "NA"} else {COLOR=$2; print $1, $2 } }' 
1
$ awk '{print $1, ($2==p ? "NA" : $2); p=$2}' file 
1 Blue 
2 Red 
3 Yellow 
4 NA 
5 NA 
6 Purple 
7 NA 
8 Green 
+0

如果「重複」意味着連續重複此命令的工作 – haifzhan

+1

對,這個問題有兩種可能的正確解決方案 - 如果重複的值是連續的,如問題所示,@ VipinKumar如果重複的值不連續或者它們是連續的,但你不在乎將所有的$ 2值加載到內存中。很可能Vipin是正確的方法,除非輸入文件很大,或者你不想替換斷開的重複值。 –