我在example
文件中有一个ID列表,如下所示:
3SN0P00000026941
14N0P00000026677
6SN0P00000024671
3SN0P00000018643
我想输出的内容如下所示:
ENSN0P00000026941 3
ENSN0P00000026677 14
ENSN0P00000024671 6
ENSN0P00000018643 3
它基本上从每行的前3个字符范围内提取所有整数,分别替换为“ENS”或“EN”,例如前3个字符中有1个整数,就会替换为“EN”;如果有2个整数,则替换为“ENS”。
问题是我不知道如何执行这样一个替换,即只针对前3个字符范围内的整数,并根据存在的整数数量将其替换为“EN”或“ENS”。我尝试使用sed
、sed 's/^.../ENS/g'
,输出与原始列表相比没有任何差异。
是否有代码或脚本可以执行这样的过程?例如使用awk
、sed
或其他函数?
3条答案
按热度按时间ijxebb2r1#
使用
sed
gkl3eglg2#
我将按照以下方式利用GNU
AWK
完成此任务,让file.txt
内容那么
给出输出
说明:如果
two
至少有2个前导数字,则将其设置为1
,否则为0
。然后使用所谓的三元运算符(条件:
值为真?
值为假)和substr
函数,根据该值打印print
,打印的是以下元素的连接ENS
,如果为两个,则为EN
lbsnaicq3#
达到相同效果的4种不同方式:
.....并在
awk
组合中进行了测试:一个二个一个一个