Atualizar o cabeçalho da tabela em relação ao nome do arquivo

3

Eu tenho vários arquivos chamados follow (eu só dou 2 nomes como exemplos) (nota: eles têm um separador de campo de ; de ponto-e-vírgula):

component1_component2_component3.csv

por exemplo,

almourol_gfdl_85.csv
almourol_had_85.csv

Cada uma dessas tabelas é organizada da seguinte forma:

YEAR;MONTH;DAY;WFDisi;SWIM;GAP3;HYPE;VIC
1971;01;01;1206.1;627;1252.6;909;357.6
1971;01;02;1303.4;654.3;1397.4;916;478.5
1971;01;03;1248.9;662;1318.8;951;653.1

As três primeiras colunas são sempre as mesmas, mas o número de colunas pode mudar e, às vezes, as tabelas são as seguintes:

YEAR;MONTH;DAY;ECOMAG;HYPE
1971;01;01;4138.3;4390
1971;01;02;4129;4380
1971;01;03;4115.9;4370

Para todas as tabelas, gostaria de alterar o cabeçalho implementando o segundo componente do nome do arquivo. Então, para os dois exemplos da "vida real" aqui, a saída desejada deve ficar assim:

exemplo1: - nome do arquivo: almourol_gfdl_85.csv - saída desejada:

YEAR;MONTH;DAY;GFDL_WFDisi;GFDL_SWIM;GFDL_GAP3;GFDL_HYPE;GFDL_VIC
1971;01;01;1206.1;627;1252.6;909;357.6
1971;01;02;1303.4;654.3;1397.4;916;478.5
1971;01;03;1248.9;662;1318.8;951;653.1

exemplo2: - nome do arquivo: almourol_had_85.csv - saída desejada:

YEAR;MONTH;DAY;HAD_ECOMAG;HAD_HYPE
1971;01;01;4138.3;4390
1971;01;02;4129;4380
1971;01;03;4115.9;4370
    
por steve 12.08.2016 / 15:43

1 resposta

3

Então você quer:

  • divida o nome do arquivo em campos delimitados por sublinhado
  • anexe o segundo campo do nome do arquivo ao quarto e aos campos de cabeçalho maiores, em maiúsculas

Em awk :

awk '
  BEGIN{FS=";"; OFS=FS} 
  FNR==1 {
    split(FILENAME,a,"_"); 
    for (i=4; i<=NF; i++) $i = sprintf("%s_%s", toupper(a[2]), $i)}1
' *85.csv

por exemplo,

$ awk 'BEGIN{FS=";"; OFS=FS} FNR==1 {split(FILENAME,a,"_"); for (i=4; i<=NF; i++) $i = sprintf("%s_%s", toupper(a[2]), $i)}1' *85.csv
YEAR;MONTH;DAY;GFDL_WFDisi;GFDL_SWIM;GFDL_GAP3;GFDL_HYPE;GFDL_VIC
1971;01;01;1206.1;627;1252.6;909;357.6
1971;01;02;1303.4;654.3;1397.4;916;478.5
1971;01;03;1248.9;662;1318.8;951;653.1
YEAR;MONTH;DAY;HAD_ECOMAG;HAD_HYPE
1971;01;01;4138.3;4390
1971;01;02;4129;4380
1971;01;03;4115.9;4370
    
por 12.08.2016 / 16:05