gawk를 사용하여 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

폴리스티렌간단히 말해서 열 이름은 입니다 measurementX. 실제로는 temperature, 또는 pumpmotor등이 될 수 있습니다.

답변1

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

관련 정보