Eu quero executar as tarefas abaixo,
1) imprimir palavra se contagem de palavras da linha = 1
2) imprimir a 4ª palavra se a contagem de palavras da linha > 3
3) imprimir linha em branco em todos os outros casos
O arquivo de entrada é,
cat file.txt
Hi there I welcome you
Hi there You
Hi
Hi there
Hi there I welcome you all
A saída esperada é,
welcome
Hi
welcome
Quando estou usando o código abaixo, ele está me dando saída com linha em branco adicional, o que não é esperado.
cat file.txt | awk '{ if (NF>3) {print $4} else if (NF==1) {print $1} else {print "\n"} }'
welcome
Hi
welcome
Eu resolvi isso usando o código abaixo,
cat file.txt | awk '{ if (NF>3) {print $4} else if (NF==1) {print $1} else {print $10000} }'
welcome
Hi
welcome
No entanto, quero entender o que deu errado e por que outra instrução está sendo executada duas vezes e me dando uma saída inesperada?
É porque
print
a instrução por padrão adiciona uma nova linha no final da string que está imprimindo. Quando usado com\n
ele imprime uma nova linha dupla como você vê na saída. Useprintf
em vez dissoSem as construções de ramificação explícitas,
if..else if..else
, você pode simplesmente fazerO
print
comando sempre adiciona uma nova linha. Entãoprint "\n"
imprime a nova linha que você especificou mais a que foi adicionada.Você pode usar
print ""
ouprintf "\n"
.