-3

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

@ATDGGSGDTSG
NTCCCCC
+
@nddhdhnadn
@ATDGGSGDTSG
NTCCCCC
+
nddhdhnadn

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

我该怎么做?

4

5 回答 5

2
perl -ne 'print if $b and !/^@/; $b=/^@/' file
于 2013-10-21T09:25:44.317 回答
1

awk

$ awk 'NR%4==2' a
NTCCCCC
NTCCCCC

NR代表数字或记录,在这种情况下是行数。然后,如果我们将它除以 4,我们得到所有模数为 2 的线。


更新您的评论

如果我希望输出为 >“nextline”NTCCCCCC >“nextline”NTCCCCCC 即我想在重定向输出时在该行之前添加“>”。

这样,例如:

$ awk 'NR%4==2 {print ">"; print $0}' a
>
NTCCCCC
>
NTCCCCC

另一个例子:

$ seq 30 | awk 'NR%4==2' 
2
6
10
14
18
22
26
30
于 2013-10-21T09:24:00.980 回答
0
awk '/^\@/{getline;print}' file
于 2013-10-21T09:36:19.253 回答
0
awk '/^\@/{getline;print}' your_file
于 2013-10-21T09:31:13.840 回答
0

您可以有一个变量,$printNextLine并循环遍历所有输入,将其设置为1每当您看到带有 @ 的行并打印当前行,同时将变量设置回0if it is 1

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

于 2013-10-21T09:34:54.927 回答