Excluir os últimos caracteres antes do delimitador

0

O conteúdo do arquivo de entrada é como:

header;header;header;header
2018/06/04;141000;bla;bla

Saída desejada:

header;header;header;header
2018/06/04;1410;bla;bla

Eu tenho o comando abaixo com sed

sed -i 's/.//16' $inputFile

Mas apaga meu cabeçalho como:

header;hder;header;header
2018/06/04;1410;bla;bla

Para evitar isso, tentei fazer:

tail -n +2 | sed -i 's/.//16' $inputFile

Mas não está funcionando. Agradecemos antecipadamente

    
por Mareyes 20.08.2018 / 22:07

2 respostas

2

Usando awk :

awk -F ';' -v OFS=';' 'NR > 1 { sub("..$", "", $2) }; 1' <"$inputFile"

Isso modificaria o segundo campo ; -delimited em cada linha de entrada, exceto a primeira, removendo os dois últimos caracteres dela.

O trailing 1 faz com que todas as linhas sejam exibidas (pode ser substituído por { print } ).

Você redirecionaria a saída disso para um novo arquivo, no qual posteriormente você poderia substituir o original.

    
por 21.08.2018 / 12:06
1

Se dois caracteres devem ser removidos antes do segundo delimitador (e assumindo como em sua amostra que sempre há pelo menos dois caracteres antes de cada um dos dois primeiros delimitadores), use:

sed -i -- '1!s/..;/;/2' "$inputFile"

O 1! evita alterar a linha do cabeçalho (primeiro).
O resto remove dois caracteres antes do delimitador ; .

    
por 21.08.2018 / 01:18