通过与其他列进行比较来替换列

时间:2013-06-04 13:11:55

标签: bash awk

我有一个像这样的文件

1      CC     AAA   

1      Na    AAA

1      Na    AAA

1      Na    AAA

1      Na    AAA

1      CC    BBB

1     Na    BBB

1     Na    BBB

1     xa    BBB

1     CC    CCC

1     Na    CCC

1     da    CCC

我想删除第2列,然后使用"01"替换AAA"02"替换BBB,依此类推整个文件。最后输出应该是,

1     01    AAA 

1     01    AAA

1     01    AAA

1     01    AAA

1     01    AAA

1     02    BBB

1     02    BBB

1     02    BBB

1     02    BBB

1     03    CCC

1     03    CCC

1     03    CCC

我没有任何线索让这个工作。请尽可能帮助我。在每个cc中,新变量开始。从AAABBB的内容只能通过第二列中的CC跟踪。

3 个答案:

答案 0 :(得分:2)

awk中执行此操作的一种方法:

awk '$3!=a&&NF{a=$3;x=sprintf("%02d",++x);print $1,x,$3;next}$3==a&&NF{print $1,x,$3;next }1' inputFile

答案 1 :(得分:1)

这是使用awk的一种方式:

awk '$3 != r { ++i } { $2 = sprintf ("%02d", i) } { r = $3 }1' OFS="\t" file

我已将OFS设置为tab-char,但您可以选择自己喜欢的内容。结果:

1   01  AAA
1   01  AAA
1   01  AAA
1   01  AAA
1   01  AAA
1   02  BBB
1   02  BBB
1   02  BBB
1   02  BBB
1   03  CCC
1   03  CCC
1   03  CCC

答案 2 :(得分:0)

似乎你想要:

awk '$2=="CC" { a+=1 } {$2=sprintf("%02d",a)} 1' input