我有一个txt文件,我需要复制每四行的第一行并将其打印到每四行的第3行。并将其打印到新的txt文件中。 e.g
@CR5SM:00004:00029
TTTTCTCTTTCTTTCTT
+
>>>/>@99419BAAABB
@CR5SM:00005:00026
ATTATAGAGGGATAG
+
;969999999-4;BB
将其更改为:
@CR5SM:00004:00029
TTTTCTCTTTCTTTCTT
+CR5SM:00004:00029
>>>/>@99419BAAABB
@CR5SM:00005:00026
ATTATAGAGGGATAG
+CR5SM:00005:00026
;969999999-4;BB
我尝试过使用Awk,但似乎无法找到正确的命令来执行此操作。 有没有人有任何解决方案?感谢
答案 0 :(得分:3)
使用awk
:
$ awk '/^@/{a=substr($0,2)}/^\+/{$0=$0 a}1' file
@CR5SM:00004:00029
TTTTCTCTTTCTTTCTT
+CR5SM:00004:00029
>>>/>@99419BAAABB
@CR5SM:00005:00026
ATTATAGAGGGATAG
+CR5SM:00005:00026
;969999999-4;BB
您可以通过说:
将输出重定向到另一个文件awk '/^@/{a=substr($0,2)}/^\+/{$0=$0 a}1' file > newfile
substr
函数捕获以@
开头的行,从第二个字符开始直到行尾。 +
开头的行(请注意我们将其转义为因为它是元字符)。一旦找到该行,我们将捕获的行附加到现有行。 1
允许我们打印线条。 答案 1 :(得分:3)
尝试:
awk '
(NR-1) % 4 == 0 { l=substr($0,2); print; next } # save every 4th line (print & continue)
(NR-1) % 4 == 2 { print $0 l; next } # append saved line to every 3rd line (print & continue)
{ print }' \ # all other lines: print as is
infile > outfile # specify input file and redirect output to output file
答案 2 :(得分:1)
这可能适合你(GNU sed):
sed 'h;n;n;G;s/\n.//;n' file
复制第一行,打印第一行和第二行,并将第一行追加到第三行,删除第一行的第一个字符,打印第一行,然后重复第四行。