用数字替换列的字母字符

问题描述 投票:1回答:2

如何用数字替换列的字母字符?我有一个文件,如:

1  A 005
2  A 007
3  A 009
4  C 005
5  C 007
6  C 009
7  P 005
8  P 007
9  P 009 
10 S 010
11 S 010
12 T 020

我想用数字替换第二列,以便所有的As替换为1;所有的C都用2代替,所有的P用3代替;和下一个数字的下一个字符。所需的输出是:

1  1 005
2  1 007
3  1 009
4  2 005
5  2 007
6  2 009
7  3 005
8  3 007
9  3 009 
10 4 010
11 4 010
12 5 020
bash shell awk
2个回答
1
投票

解决方案1:如果您的Input_file与显示的示例相同(按第2列排序),您也可以尝试跟随awk

awk 'prev!=$2{count++} {prev=$2;$2=count;print}'  Input_file

解决方案第二:如果你的Input_file没有排序,那么我先对它进行排序,然后使用上面的解决方案1st awk命令来获取输出。

sort -k2 Input_file | awk 'prev!=$2{count++} {prev=$2;$2=count;print}'

0
投票
awk '!num[$2]{num[$2]=++c} {$2=num[$2]}1' file
  • 第一个condition{action}表示:如果第二个字段是新手,则为该字母键存储自动增量整数值。对于你的例子num['A']=1,等等。请注意,未初始化的变量c从零开始,这意味着++c将首先是1,然后是2,依此类推。
  • 第二个{action}表示:使用该字段作为键,用前一个关联数组中的值替换第二个字段。
  • 最终1表示默认操作,打印线,与printprint $0相同
© www.soinside.com 2019 - 2024. All rights reserved.