Altera linhas em branco para duplicar linhas em branco usando o awk

2

Eu li o código que está tentando Alterar linhas em branco simples para dobrar linhas em branco usando o awk. Mas isso não funcionou para mim.

awk ~NF<2{printf\~\n\~}{print}~ <contour.dat >contour1.dat

Depois de ler o tutorial do awk, como NF , Sequências de escape , ainda não tenho nenhuma pista sobre esse código. Esta é a primeira vez que uso o awk.

Eu corro no bash. Isso me dá:

-bash: 2{printf~n~}{print}~: No such file or directory

Qual deve ser o código correto?

Obrigado antecipadamente.

Meu Env

GNU bash, versão 3.2.51 (1) -release (x86_64-apple-darwin13) Direitos autorais (C) 2007 Free Software Foundation, Inc.

versão awk 20070501

    
por Nick Dong 11.05.2017 / 10:48

1 resposta

4
awk ~NF<2{printf\~\n\~}{print}~ 

Acho que esses tils devem ser aspas duplas se você executar o comando no shell:

awk "NF<2{printf\"\n\"}{print}"

O erro que você recebe é porque o shell vê o < como um operador de redirecionamento e toma a seguinte parte como um nome de arquivo.

Ou melhor ainda, coloque o script awk entre aspas simples para que você não precise escapar das citações:

awk 'NF<2{printf"\n"}{print}'

Isso imprimiria uma nova linha extra antes de qualquer linha com menos de dois campos. Mas isso não é o mesmo que uma linha vazia, linhas com apenas uma palavra ainda teriam a linha extra vazia adicionada.

Talvez verifique se há exatamente zero campos:

awk 'NF == 0 {printf "\n"} {print}'

ou se a linha estiver totalmente vazia:

awk '$0 == "" {printf "\n"} {print}'

Mas, como a ação padrão é print $0 e uma string vazia é falsa, e printf "\n" é praticamente o mesmo que print com uma linha vazia, isso pode ser condensado em apenas:

awk '!$0; 1'
    
por 11.05.2017 / 10:55

Tags