逐行读取文件

逐行读取文件

我有一个如下文件:

@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

相关内容