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

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

@ATDGGSGDTSG
NTCCCCC
+
nddhdhnadn
@ATDGGSGDTSG
NTCCCCC
+
nddhdhnadn

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

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

-1
задан 22 October 2013 в 09:30

2 ответа

Существует много возможных решений проблемы. С 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}'
0
ответ дан 22 October 2013 в 09: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
ответ дан 22 October 2013 в 09:30

Другие вопросы по тегам:

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