У меня есть файл, который выглядит следующим образом:
@ATDGGSGDTSG
NTCCCCC
+
nddhdhnadn
@ATDGGSGDTSG
NTCCCCC
+
nddhdhnadn
Теперь это повторяющийся шаблон из «4» строк, и я каждый раз хочу напечатать только 2-ю строку, т.е. строку после строки, начинающейся с « @ "т.е. 2-я строка. 6-я строка .. и т. д.
Как я могу это сделать?
Существует много возможных решений проблемы. С 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
Это отображает каждую 4-ю строку, начинающую со строки 2 (потому что логическое выражение ((NR+2), % 4 == 0 верен, где НОМЕР содержит фактический номер строки).
Если Ваш вход, оказывается, имеет эти пустые промежуточные строки, то проблема об отображении 3-й строки и затем каждого 8-го.
awk '{if ((NR+5) % 8 == 0) print $0}'
Просто для удовольствия. Вот реализация Python, которая понятна для начинающих. Он решает вашу проблему, но не ставит своей целью печать 2-й строки и всех ее четырехкратных, но использует характеристики этой строки.
# 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