2017-04-07 87 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是正确的方法,除非输入文件很大,或者你不想替换断开的重复值。 –