Sed 将每N行复制到新行

Sed 将每N行复制到新行,sed,awk,Sed,Awk,我有一个txt文件,我需要复制每四行的第一行,并打印到每四行的第三行。并将其打印到新的txt文件中。 e、 g 将其更改为: @CR5SM:00004:00029 TTTTCTCTTTCTTTCTT +CR5SM:00004:00029 >>>/>@99419BAAABB @CR5SM:00005:00026 ATTATAGAGGGATAG +CR5SM:00005:00026 ;969999999-4;BB 我尝试过使用Awk,但似乎找不到正确的命令来执行此操作。 有

我有一个txt文件,我需要复制每四行的第一行,并打印到每四行的第三行。并将其打印到新的txt文件中。 e、 g

将其更改为:

@CR5SM:00004:00029
TTTTCTCTTTCTTTCTT
+CR5SM:00004:00029
>>>/>@99419BAAABB
@CR5SM:00005:00026
ATTATAGAGGGATAG
+CR5SM:00005:00026
;969999999-4;BB
我尝试过使用Awk,但似乎找不到正确的命令来执行此操作。
有人有什么解决办法吗?感谢使用awk
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
    允许我们打印行
      使用
      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
        允许我们打印行
      试试:

      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
      
      尝试:

      这可能适用于您(GNU-sed):

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

      这可能适用于您(GNU-sed):


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

      优雅,但它依赖于行的内容而不是它们的索引。@mklement0正确,但这似乎是某种生物医学fasta输出,对内容的依赖可能会得到回报,特别是当一些蛋白质序列重叠到多行时。不过只是猜测而已<代码>:)
听起来不错-只是想指出它;可能值得在您的答案中说明。@mklement0可能不是必需的。这些是fasta文件,具有相当特定的输出。很优雅,但它依赖于行的内容而不是它们的索引。@mklement0正确,但这似乎是某种生物医学fasta输出,对内容的依赖可能会得到回报,特别是当某些蛋白质序列重叠到多行时。不过只是猜测而已<代码>:)听起来不错-只是想指出它;可能值得在您的答案中说明。@mklement0可能不是必需的。这些是具有相当特定输出的fasta文件。