Como manter o separador de campos ao imprimir $ 0 com awk [duplicado]

8

Eu tento modificar uma coluna do meu arquivo e, em seguida, imprimo o resultado.

awk -F"|" '{ if(NR!=1){$5 = $5+0.1} print $0}' myfile

Ele faz o que eu quero, mas ao imprimir, apenas a primeira linha mantém seu separador de campo (aquele que eu não modifico).

Então, eu poderia usar print $1"|"$2"|"$3"|"$4"|"$5"|"... , mas não há uma solução usando $ 0? (Por exemplo, se eu não sei os números da coluna)

Eu acredito que eu poderia resolver meu problema facilmente com sed , mas eu tento aprender awk por enquanto.

    
por Damien 01.01.2016 / 21:31

2 respostas

10

@Sukminder já deu a resposta simples; Eu tenho algumas dicas de estilo e sintaxe útil sobre o seu código de exemplo (como uma revisão de código). Isso começou como um comentário, mas estava ficando longo.

OFS é o separador do campo de saída, como já mencionado.

$0 é o argumento padrão para print - não é necessário especificá-lo explicitamente. E outro ponto de estilo: awk tem o que é chamado de "padrões", que são como blocos condicionais internos. Então você também pode usar:

awk -F'|' 'BEGIN {OFS = FS} NR != 1 {$5 += 0.1} {print}' myfile
    
por 01.01.2016 / 22:35
14

Você pode definir o Separador do campo de saída , OFS .

'BEGIN { OFS = "|" } ...'

Ou:

'BEGIN { OFS = FS } ...'

É < espaço > por padrão.

    
por 01.01.2016 / 21:45

Tags