如何用数字替换列的字母字符?我有一个文件,如:
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
解决方案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}'
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
相同