首页 > 解决方案 > 带有 awk 的标头版本

问题描述

我有一个这样的文件:

@SRR5874687.1.171.2 length=100 1 /1
CACCGAACTGAAGACATGCGTCATCACCGAAGATTTCAACTAAAGCTGGCATGTGCCATACGTGAATACCACCTGAAGCAACTGGCATAACACCTGGCAT
+
@@@DFFDDHBFHDHGBFG@@C<@F>??CFHIH0??FFIGII<BBC@FCFCHGH.7777=D;AHEFB@?7;;>BEC;@CCCC??ACBCCCCCCC?CC@?CC
@SRR5874687.1.172.2 length=100 2 /1
CTGGACAACGCGCCGCAATATTGCAGCTTATTAGTTTGGTGATGAGAGGACTCGCGCAACCGGCACACGCGGTTTCAGCACGTGCACAACATGTACAGAC
+
?@@FBDDDFHDHHJJJIGHIIJJGGHIGI?FH<DFHJJJCF@GHFHGHIGHHEEEDDDDDDDDDDDDDD@BBBBDDEDDDDDBDDDDDDDDDDDEEEECB
@SRR5874687.1.173.2 length=100 3 /1
GTTAAAGTAGTATTGGTATTAAATTTTGTACGACGTGGGAAAATTAAACCATCTTTTTTAATAAAACGTTTTCTATGGTATTTACGACGTGGTTTAACAC
+
BBCDDDDDHHHHHJJJHIHJHJEJJJJJHEGGEHIHIJJGIHIFHGGEIGIHIIJJJJJIEHGEH@EEBDFFEED@CCCDCEFDDDBDD@DDBDDCCCC>

在文件中,我想编辑以“@SRR”开头的每一行。在常量语句“@SRR5874687.1.17X.2”之后的这一行中,其中 X 是在下一行中增加 1 的数字,我想添加空格和 X 后跟常量 /2,所以结果会像这个:“@SRR5874687.1.17X.2 X /2 长度=100”。(例如:“@SRR5874687.1.171.2 1 /2 长度=100”和“@SRR5874687.1.172.2 2 /2 长度=100”)

我是使用 awk 和正则表达式的新手,但到目前为止,我设法获得了“@SRR5874687.1.17X.2 length=100 X /2”,我只是不知道如何将它放在“length=100”之前。

我使用了 awk 方法:

awk '/^@SRR/{$0=$0" "(++i) " /2"}1' test.txt > out.txt

标签: awk

解决方案


您可以用您的字符串替换第一个空格字符:

awk '/^@SRR/{sub(/ /, " " ++i " /2 ")}1' test.txt > out.txt

推荐阅读