更新有关文件名的表头

更新有关文件名的表头

我有几个名为 has follow 的文件(我只给出 2 个名称作为示例)(注意:它们有一个分号字段;分隔符):

component1_component2_component3.csv

例如

almourol_gfdl_85.csv
almourol_had_85.csv

每个表的组织方式如下:

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

前三列始终相同,但列数可能会发生变化,有时表格如下:

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

对于所有这些表,我想通过实现文件名的第二个组成部分来更改标题。因此,对于这里所附的两个“现实生活”示例,所需的输出应如下所示:

示例1: - 文件名:almourol_gfdl_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

示例2: - 文件名:almourol_had_85.csv - 所需输出:

YEAR;MONTH;DAY;HAD_ECOMAG;HAD_HYPE
1971;01;01;4138.3;4390
1971;01;02;4129;4380
1971;01;03;4115.9;4370

答案1

所以你想:

  • 将文件名拆分为下划线分隔的字段
  • 将文件名的第二个字段添加到第四个及更大的标头字段之前(大写)

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

例如

$ 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

相关内容