如何用数字替换列的字母字符?我有一个文件,如:
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
我想用数字替换第二列,以便将所有 A 替换为1;所有 C s替换为2,所有 P s替换为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
答案 0 :(得分: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}'
答案 1 :(得分:0)
awk '!num[$2]{num[$2]=++c} {$2=num[$2]}1' file
第一个condition{action}
表示:如果第二个字段是新手,则为该字母键存储自动增量整数值。对于您的示例num['A']=1
,依此类推。请注意,未初始化的变量c
,
从零开始,这意味着++c
首先是1
,然后是2
,依此类推。
第二个{action}
表示:使用该字段作为键,将第二个字段替换为上一个关联数组中的值。
最终1
表示默认操作,打印行,与print
或print $0