Alterar cabeçalho usando sed ou awk

1

Eu tenho um arquivo diferente para o qual gostaria de alterar o cabeçalho. Atualmente as tabelas são as seguintes:

MONTH GFDL.ESM2M_ECOMAG GFDL.ESM2M_HYPE
1 3546.21855483871 2345.11127781945

Eu gostaria de alterar o . por alguns - , mas apenas para o cabeçalho. Portanto, eu gostaria da seguinte saída:

MONTH GFDL-ESM2M_ECOMAG GFDL-ESM2M_HYPE
1 3546.21855483871 2345.11127781945

Até agora eu tentei um comando sed :

sed -i.bak "1,1s/./-/" file.txt

que apenas substitui o M de "MONTH" por - . Eu também tentei um comando awk:

awk '(NR==1){gsub(".","-", $0);}{print;}' file.txt > jony.txt

Que apenas substitui todo o cabeçalho por uma sucessão de -

    
por steve 12.08.2016 / 17:49

2 respostas

3
sed '1s/\./-/g' file.txt

deve fazer isso por você

Por quê? ?

Porque o . tem um significado especial no sed. É usado usado para combinar com qualquer caractere. Você precisa retirar o significado especial escapando, isto é, \. .

    
por 12.08.2016 / 17:51
2

Usando awk com gsub() :

awk 'NR==1 {gsub("\.", "-", $0); quit};1' file.txt

Exemplo:

$ cat file.txt                                  
MONTH GFDL.ESM2M_ECOMAG GFDL.ESM2M_HYPE
1 3546.21855483871 2345.11127781945

$ awk 'NR==1 {gsub("\.", "-", $0); quit};1' file.txt
MONTH GFDL-ESM2M_ECOMAG GFDL-ESM2M_HYPE
1 3546.21855483871 2345.11127781945
    
por 12.08.2016 / 18:14

Tags