Csv
使用 gawk 根據 CSV 列數據創建文件名
我有一個非常混亂的 CSV 文件,其中標題如下所示:
maindata.csv
time;area;measurement1;measurement2;measurement3;.....measurement12
我能夠使用以下命令格式根據測量名稱分別拆分單個大文件
gawk
,以便將每個單獨的文件保留為以下 CSV 格式:measurement1.csv -> has csv header [time,area,measurement1] measurement2.csv -> has csv header [time,area,measurement2] .... measurement12.csv -> has csv header [time,area,measurement12]
gawk
命令:gawk -F';' '{print $1","$2","$X}' maindata.csv > /splitdata/measurementX.csv
其中
X
是相應測量的列號。我每次都必須在終端上手動執行此操作,並且想知道我是否真的可以使用某種方式提取測量列名稱
gawk
並將上述命令替換為可以自動用於命名文件的變數measurementX.csv
例子
gawk -F';' '{print $1","$2","$3}' maindata.csv | head -n 1 > splitdata/measurement<get the column 3 name here>.csv
PS為簡潔起見,列名是
measurementX
. 在實踐中,它們可以是temperature
,或pumpmotor
等等。
measurements.awk
:BEGIN{FS=";";OFS=","} { for (X=3;X<=NF;X++){ if (NR==1){name[X]=$X} print $1,$2,$X > name[X]".csv" } }
看到這
NR==1
僅適用於標題。因此,我們將測量名稱保存在數組name
中,然後繼續[time,area,measurement]
在相應文件中列印每個集合。$ gawk -f measurements.awk file $ cat file time;area;temperature;pumpmotor;diameter 1;2;3;4;5 6;7;8;9;10
$ cat diameter.csv time,area,diameter 1,2,5 6,7,10 $ cat temperature.csv time,area,temperature 1,2,3 6,7,8 $ cat pumpmotor.csv time,area,pumpmotor 1,2,4 6,7,9