将每第n行复制到一个新行

时间:2014-04-07 02:48:21

标签: sed awk

我有一个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,但似乎无法找到正确的命令来执行此操作。 有没有人有任何解决方案?感谢

3 个答案:

答案 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

复制第一行,打印第一行和第二行,并将第一行追加到第三行,删除第一行的第一个字符,打印第一行,然后重复第四行。