Lendo um arquivo linha por linha

-1

Eu tenho um arquivo que parece:

@ATDGGSGDTSG
NTCCCCC
+
nddhdhnadn
@ATDGGSGDTSG
NTCCCCC
+
nddhdhnadn

Agora é um padrão repetitivo de "4" linhas e eu sempre quero imprimir apenas a segunda linha, ou seja, a linha após a linha que começa com "@", ou seja, a segunda linha..6 linha..etc.

Como posso fazer isso?

    
por user173468 21.10.2013 / 09:27

2 respostas

1

Existem muitas soluções possíveis para o problema. Com awk , a linha a seguir atende aos requisitos:

awk '{if ((NR+2) % 4 == 0) print $0}'

Teste:

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

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

Exibe toda quarta linha a partir da linha 2 (porque a expressão lógica ((NR + 2)% 4 == 0 é verdadeira, onde NR contém o número real da linha).

Se a sua entrada tiver essas linhas vazias no meio, o problema é exibir a terceira linha e depois a oitava.

awk '{if ((NR+5) % 8 == 0) print $0}'
    
por lgarzo 21.10.2013 / 09:40
0

Apenas por diversão. Aqui está uma implementação de python que é compreensível para iniciantes. Isso resolve o seu problema, mas, como tal, não pretende imprimir a segunda linha e todas as suas quatro dobras, mas usa as características dessa linha.

# 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
    
por don.joey 21.10.2013 / 11:06