使用awk或shell修改某些字段并将其插入lin

2024-05-18 14:50:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个有几千行的文本文件,我想通过做一些修改来更新这些行

原始行:

b1522   ftp://ftp.genecard.giv.nlm.org/genome/all/ABC_001596115.1_ASM159611v1#
dd1120  ftp://ftp.genecard.giv.nlm.org/genome/all/ABC_231146189.1_ASM159611v1#

期望输出:

b1522   ftp://ftp.genecard.giv.nlm.org/genome/all/ABC/001/596/115/ABC_001596115.1_ASM159611v1#
dd1120  ftp://ftp.genecard.giv.nlm.org/genomes/all/ABC/231/146/189/ABC_231146189.1_ASM159611v1#

我想从“ABC”复制到“.”之前的最后一个数字,在“all”之后用两个正斜杠粘贴,删除下划线,每三个字符后用一个正斜杠。我不知道该怎么和艾克相处。我的awk知识很基础


Tags: orggenomeftpnlm数字allabc文本文件
2条回答

我不知道如何在awk里做,但是你可以用sed轻松地做

  sed -r -e 's%/(ABC_)((...)(...)(...))%/ABC/\3/\4/\5/\1\2%' < infile.txt > out file.txt

它的作用是

匹配包含ABC\u的每一行

(ABC_uu)将ABC_u捕获到一个名为\1的变量中

(…)(…)(…)(…)。将接下来的9个字符捕获到名为\2的变量中

(…)捕获三个字符并将它们放入变量中。这三个实例将分别创建名为\3、\4和\5的变量

s%pattern%replacement%与模式匹配,并用替换项替换所有模式

在这种情况下,我们匹配ABC和9个字符,将它们存储在变量中,然后将整个批次替换为:

/ABC/\3/\4/\5/\1\2

其中/ABC/\3/\4/\5/

是你正在(添加)插入的内容

和\1\2

把原文放回去,在插入的右边

另一个类似的sed

sed -i.bak -r 's~((ABC)_(...)(...)(...))~\2/\3/\4/\5/\1~' file

相关问题 更多 >

    热门问题