Alguém pode explicar o significado do seguinte script awk?

0

O seguinte script awk foi escrito para eu remover registros com campos vazios no meu arquivo de entrada. Mas tenho dificuldade em entender isso. Você poderia, por favor, explicar em detalhes por que está escrito assim?

awk -F, '{for(i=1;i<=NF;i++)if($i==""){next}}1' inputfile

    
por Daniel 29.11.2016 / 17:09

1 resposta

9

Vamos dividir em componentes:

awk                    # The actual program
-F,                    # Set the field delimiter to a comma
'{                     # Beginning of the main series of action statements
for(i=1;i<=NF;i++)     # Your typical for loop.   NF is the number of fields 
                       # in the input
  if($i==""){          # $i will expand to e. g. $1, then $2, etc.,  which 
                       # is each field in the input data
                       # If it is "" (or an empty string):
     next}             # Skip to the next entry.  End of conditional
                       # and of the foor loop (no braces here)
}                      # End of the main series of action statements
1'                     # awkish shorthand basically for 'print', and end of
                       # the script
inputfile              # The file to be processed

Como a ação padrão de awk é incluir dados, o script simplesmente ignora registros com campos de dados vazios e imprime tudo que não foi ignorado.

    
por 29.11.2016 / 17:22

Tags