grep campos separados por vírgula com várias condições

2

Eu tenho um arquivo de texto grande em um servidor Linux contendo o seguinte, por exemplo:

123456789012345,00,0000,0000
1234567890123450,00,0000,000
12345678901b111,0,0000,0000
1234567/89011111,00,0000,00000

OUTPUT

12345678901b111,0,0000,0000       line# 3
1234567/8011111?,00,0000,00000    line# 4

então minha meta é:

Gostaria de usar as linhas grep

not 15 or 16 digits only before first comma
not 2 digits only before second comma
not 3 or 4 digits only before third comma
not 3 or 4 digits only after third comma

**the line should cover ANY of the predefined conditions**

com o número da linha de impressão para cada linha e salve em outro texto.

    
por αԋɱҽԃ αмєяιcαη 15.11.2017 / 16:44

1 resposta

2

AWK solução:

awk -F, '$1!~/[0-9]{15,16}/ || $2!~/[0-9]{2}/ || $3!~/[0-9]{3,4}/ || $4!~/[0-9]{3,4}/{ 
             printf "%-35s line# %s\n",$0,NR 
         }' file
  • -F, - tratando a vírgula , como separador de campos

  • printf "%-35s line# %s\n" - saída formatada alinhada / organizada

A saída:

12345678901b111,0,0000,0000         line# 3
1234567/89011111,00,0000,00000      line# 4
    
por 15.11.2017 / 16:57