在perl中逐行读取

在perl中逐行读取,perl,sed,awk,Perl,Sed,Awk,假设我有一个如下格式的文本文件 @ATDGGSGDTSG NTCCCCC + @nddhdhnadn @ATDGGSGDTSG NTCCCCC + nddhdhnadn 现在它是一个“4”行的重复模式,我每次只想打印第2行,即以“@”开头的行之后的行,即第2行..第6行..等等 我该怎么做?使用awk: $ awk 'NR%4==2' a NTCCCCC NTCCCCC NR表示数字或记录,在本例中为行号。然后,如果我们把它除以4,我们得到所有模为2的线 更新你的评论 如果我希望输出为>“

假设我有一个如下格式的文本文件

@ATDGGSGDTSG
NTCCCCC
+
@nddhdhnadn
@ATDGGSGDTSG
NTCCCCC
+
nddhdhnadn
现在它是一个“4”行的重复模式,我每次只想打印第2行,即以“@”开头的行之后的行,即第2行..第6行..等等

我该怎么做?

使用
awk

$ awk 'NR%4==2' a
NTCCCCC
NTCCCCC
NR
表示数字或记录,在本例中为行号。然后,如果我们把它除以4,我们得到所有模为2的线


更新你的评论
如果我希望输出为>“nextline”NTCCCCC>“nextline” NTCCCCC,即我想在该行之前添加“>”,同时重定向 输出

这样,例如:

$ awk 'NR%4==2 {print ">"; print $0}' a
>
NTCCCCC
>
NTCCCCC
$ seq 30 | awk 'NR%4==2' 
2
6
10
14
18
22
26
30

另一个例子:

$ awk 'NR%4==2 {print ">"; print $0}' a
>
NTCCCCC
>
NTCCCCC
$ seq 30 | awk 'NR%4==2' 
2
6
10
14
18
22
26
30

您可以使用一个类似于
$printNextLine
的变量,并循环所有输入,在看到带有@的行时将其设置为
1
,并打印当前行,同时将变量设置回
0
(如果是
1


没有其他答案那么有效和简短,但对于perl新手来说可能更直观。

和wat如果我希望输出为>“nextline”NTCCCCC>“nextline”NTCCCCC,即我想在重定向输出时在该行之前添加“>”。@GauravChetal检查我更新的答案,它应该会成功。既然你是新来的,如果你的问题已经解决了,请别忘了把答案标为“接受”。您可以点击答案旁边的复选标记,将答案从空心切换为绿色。看看你是否有任何疑问!嗯,为什么要投否决票?另外,@GauravChetal在将来的问题中尝试改进您的描述。如果你说“每2,6…行”,但你真正想要的是“每一行在@之后”,那么就说出来。先生,现在如果我想说打印第一行,那么我将不得不使用“N%4=1”,我想打印第一行和第二行,所以我通过管道将他们说“awk'NR%4==1{print$0}check.fastq | awk'NR%4==2{print$0}check.fastq”,但它不起作用。。(我希望输出类似-->firstline(newline)secondline(newline)>>firstline(newline)secondline(newline))。对不起,如果我解释得不好。如果你有一个新问题,请问一个新问题,确保你问的是你想要的。这将避免我们每次都更新我们的答案。要做你需要的事情,你可以使用
awk'NR%4==1 | | NR%4==2'文件@"在第三行的开头。那么它将如何发生呢?解决方案。@GauravChetal这一行将在
@
行之后打印下一行,而不仅仅是第二行、第六行等等line@mpapec:先生,我非常抱歉。我接受了,但它显示出-2我不知道为什么。您能帮忙吗。@GauravChetal如果您的行以
@
t开头hen输出应该是两行,带有
NTCCCCC
。如果$b和!/@/;$b=/@/“文件
不是行中的第一个字符,则使用
perl-ne'打印。还有另一个crosspost。
awk '/^\@/{getline;print}' file