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