Unix 用“替换重复变量”;不适用;使用awk

Unix 用“替换重复变量”;不适用;使用awk,unix,awk,Unix,Awk,假设我有下一个文件: 1 Blue 2 Red 3 Yellow 4 Yellow 5 Yellow 6 Purple 7 Purple 8 Green 我想得到以下文件,用“NA”替换重复变量 试试这个- $ awk 'a[$2]++{$2="NA"} 1' f 1 Blue 2 Red 3 Yellow 4 NA 5 NA 6 Purple 7 NA 8 Green 试试这个- $ awk 'a[$2]++{$2="NA"} 1' f 1 Blue 2 Red 3 Yellow 4 NA

假设我有下一个文件:

1 Blue
2 Red
3 Yellow
4 Yellow
5 Yellow
6 Purple
7 Purple
8 Green
我想得到以下文件,用“NA”替换重复变量

试试这个-

$ awk 'a[$2]++{$2="NA"} 1' f
1 Blue
2 Red
3 Yellow
4 NA
5 NA
6 Purple
7 NA
8 Green
试试这个-

$ awk 'a[$2]++{$2="NA"} 1' f
1 Blue
2 Red
3 Yellow
4 NA
5 NA
6 Purple
7 NA
8 Green

好的,这个问题有两种可能的正确解决方案-如果重复值如问题所示是连续的,那么我的解决方案是@VipinKumar's,如果重复值不是连续的,或者如果它们是连续的,但是您不关心将所有$2值加载到内存中。很可能Vipin是正确的方法,除非输入文件很大,或者您特别不想替换断开连接的重复值。对,有两种可能的正确解决方案可以解决此问题-如果重复值如问题所示是连续的,@VipinKumar's,如果重复的值不是连续的,或者它们是连续的,但您不关心将所有$2值加载到内存中。很可能Vipin是正确的方法,除非输入文件很大或者您特别不想替换断开连接的重复值。
awk '{ if ($2 == COLOR) {print $1, "NA"} else {COLOR=$2; print $1, $2 } }'
$ 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