我有一个包含数千行的文本文件,我想通过进行一些更改来更新这些行。
原帖:
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去做。我的awk知识非常基础
答案 0 :(得分:1)
我不知道如何在awk中执行此操作,但您可以轻松地使用' sed'
sed -r -e 's%/(ABC_)((...)(...)(...))%/ABC/\3/\4/\5/\1\2%' < infile.txt > out file.txt
这是做什么的
匹配包含ABC _
的每一行(ABC_)将ABC_捕获到名为\ 1
的变量中((...)(...)(...))。将接下来的9个字符捕获到名为\ 2
的变量中(...)捕获三个字符并将它们放入变量中。这三次出现将分别创建名为\ 3,\ 4和\ 5
的变量s%pattern%replacement%匹配模式并用替换替换所有模式。
在这种情况下,我们匹配ABC_和9个字符,将它们存储在变量中,然后用以下内容替换整个批次:
/ABC/\3/\4/\5/\1\2
其中/ ABC / \ 3 / \ 4 / \ 5 /
您是(添加)插入
和\ 1 \ 2
将原始文本放回插入的右侧
答案 1 :(得分:1)
另一个类似的sed
sed -i.bak -r 's~((ABC)_(...)(...)(...))~\2/\3/\4/\5/\1~' file