Чтение файла построчно

У меня есть файл, который выглядит следующим образом:

@ATDGGSGDTSG
NTCCCCC
+
nddhdhnadn
@ATDGGSGDTSG
NTCCCCC
+
nddhdhnadn

Теперь это повторяющийся шаблон из «4» строк, и я каждый раз хочу напечатать только 2-ю строку, т.е. строку после строки, начинающейся с « @ "т.е. 2-я строка. 6-я строка .. и т. д.

Как я могу это сделать?

-1
задан 17.04.2020, 14:29

2 ответа

Есть много возможных решений этой проблемы. С помощью awk следующая строка соответствует требованиям:

awk '{if ((NR+2) % 4 == 0) print [110]}'

Тест:

$ cat test.txt
@ATDGGSGDTSG
NTCCCCC
+
nddhdhnadn
@ATDGGSGDTSG
NTCCCCC
+
nddhdhnadn

$ awk '{if ((NR+2) % 4 == 0) print [111]}' test.txt
NTCCCCC
NTCCCCC

Отображает каждую четвертую строку, начиная со строки 2 (потому что логическое выражение ((NR + 2)% 4 == 0 истинно, где NR содержит фактический номер строки).

Если ваш ввод содержит эти пустые строки между ними, то проблема заключается в отображении 3-й строки и затем каждой 8-й .

awk '{if ((NR+5) % 8 == 0) print [112]}'
0
ответ дан 17.04.2020, 14:30

Просто для удовольствия. Вот реализация 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
0
ответ дан 17.04.2020, 14:31

Теги

Похожие вопросы