我有一个如下文件:
@ATDGGSGDTSG
NTCCCCC
+
nddhdhnadn
@ATDGGSGDTSG
NTCCCCC
+
nddhdhnadn
现在它是“4”行的重复模式,我每次都只想打印第 2 行,即以“@”开头的行之后的行,即第 2 行...第 6 行...等等。
我该怎么做?
答案1
这个问题有很多可能的解决方案。使用awk
,以下行符合要求:
awk '{if ((NR+2) % 4 == 0) print $0}'
测试:
$ cat test.txt
@ATDGGSGDTSG
NTCCCCC
+
nddhdhnadn
@ATDGGSGDTSG
NTCCCCC
+
nddhdhnadn
$ awk '{if ((NR+2) % 4 == 0) print $0}' test.txt
NTCCCCC
NTCCCCC
它从第 2 行开始显示每 4 行(因为逻辑表达式 ((NR+2) % 4 == 0 为真,其中 NR 包含实际行号)。
如果您的输入恰好在其间有这些空行,那么问题就在于显示第 3 行,然后显示每 8 行。
awk '{if ((NR+5) % 8 == 0) print $0}'
答案2
只是为了好玩。这是一个初学者可以理解的 Python 实现。它解决了您的问题,但其目的并不是打印第二行及其所有四行,而是使用该行的特征。
# you can of course also read this from a file
test_string = """
...: @ATDGGSGDTSG
...:
...: NTCCCCC
...:
...: +
...:
...: nddhdhnadn
...:
...: @ATDGGSGDTSG
...:
...: NTCCCCC
...:
...: +
...:
...: nddhdhnadn
...: """
# put it into a list
test_li = test_string.split()
# output your list
print test_li
['@ATDGGSGDTSG',
'NTCCCCC',
'+',
'nddhdhnadn',
'@ATDGGSGDTSG',
'NTCCCCC',
'+',
'nddhdhnadn']
# select the lines you are interested in
for line in test_li:
if line.startswith('@'):
continue
if line == '+':
continue
if line.islower():
continue
print line