Encontrar um caractere específico em uma a várias posições em um arquivo

2

Eu estou procurando uma maneira de percorrer arquivos de texto de formato fixo e procurando por um caractere específico em uma ou várias posições de caracteres específicos, incluindo a posição do primeiro caractere, dentro de qualquer linha de dados no arquivo. Se qualquer uma dessas posições atender aos critérios de caractere, eu quero produzir esse registro / linha. Alguém tem um comando grep ou awk que faria isso? Por exemplo, se eu estou procurando por um asterisco (*) na posição 5 ou 10 ou 25 do arquivo X, como isso seria feito em awk ou grep? Exemplo de arquivo

     cat test.txt
    *   *    *
    *   X    *
    *   *    Y
    *   X    Y
    
por JohnW 01.12.2016 / 15:52

3 respostas

0

grep '^\(.\{4\}\|.\{24\}\)\*' X

Encontre todas as linhas se o arquivo X contiver um asterisco (entre aspas porque em uma expressão regular significa zero ou mais do átomo precedente) precedido por 4 ou 24 caracteres desde o início da linha.

    
por 01.12.2016 / 15:59
0

Provavelmente, a seguinte linha awk ajudará você a entender melhor

printf '%s\n' "foo bar *" foo "more foo * more * foo and baz" "another foo bar foo" | awk '{for (i=1;i<=NF;i++) if ($i=="*") print $i " appears in field: " i}'

Tão simples quanto percorrer os campos, combinando o campo com o padrão e imprimindo-o

    
por 01.12.2016 / 16:03
0

Com pelo menos gawk e mawk , você pode tratar cada caractere como um campo, definindo um separador de campo vazio. Então, por exemplo, você pode fazer

gawk -F '' '$5 == "*" || $10 == "*"' test.txt

que faz com que os registros correspondentes (linhas) sejam impressos usando a regra de impressão padrão.

Um truque semelhante em perl (observe que os campos são indexados com zero)

perl -F'' -ane 'print if $F[4] eq "*" || $F[9] eq "*"' test.txt
    
por 01.12.2016 / 18:07

Tags