在perl中逐行阅读

时间:2013-10-21 09:22:30

标签: perl sed awk

假设我有一个格式为

的文本文件
@ATDGGSGDTSG
NTCCCCC
+
@nddhdhnadn
@ATDGGSGDTSG
NTCCCCC
+
nddhdhnadn

现在它是一个“4”行的重复模式,我每次只想打印第二行,即以“@”开头的行后面的行,即第二行......第六行......等等。

我该怎么做?

5 个答案:

答案 0 :(得分:2)

perl -ne 'print if $b and !/^@/; $b=/^@/' file

答案 1 :(得分:1)

使用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

答案 2 :(得分:0)

awk '/^\@/{getline;print}' your_file

答案 3 :(得分:0)

你可以有一个像$printNextLine这样的变量并循环遍历你的所有输入,每当你看到一行@并打印当前行时将其设置为1,同时将变量设置回{{1如果是0

不像其他答案那样有效和简短,但对于新人来说可能更直观。

答案 4 :(得分:0)

awk '/^\@/{getline;print}' file