0

我有这样的文件

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"for AAA"02"forBBB等替换整个文件。最后输出应该看起来像,

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 跟踪。

4

3 回答 3

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
于 2013-06-04T13:43:21.100 回答
1

这是一种使用方法awk

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

我已将 OFS 设置为制表符,但您可以选择自己喜欢的。结果:

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
于 2013-06-04T14:01:45.093 回答
0

好像你想要:

awk '$2=="CC" { a+=1 } {$2=sprintf("%02d",a)} 1' input
于 2013-06-04T14:11:25.583 回答