ファイル名のヘッダー更新

ファイル名のヘッダー更新

次の名前のファイルが複数あります(例: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

最初の3つの列は常に同じですが、列の数は変更される可能性があり、時にはテーブルは次のように表示されます。

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

これらすべてのテーブルに対してファイル名の2番目のコンポーネントを実装してヘッダーを変更したいと思います。したがって、ここに添付されている2つの「実際の」例では、必要な出力は次のようになります。

例 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

だからあなたは欲しい:

  • ファイル名を下線付きのフィールドに分割
  • 4番目と大きいヘッダーフィールド(大文字)の前にファイル名の2番目のフィールドを追加します。

存在する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

おすすめ記事