gawk를 사용하여 CSV 파일에 조건부로 새 헤더를 도입하는 방법

gawk를 사용하여 CSV 파일에 조건부로 새 헤더를 도입하는 방법

csv 파일이 있는데 열 번호만 추출하고 싶습니다.7그리고11. 열 7(해당 열에 값이 있음)의 값에 따라 OK또는 그 옆에 열( 맵 위치 KO라고 함)을 삽입하고 싶습니다 .value

OK -> 0
KO -> 1

또한 시작 부분에 간단한 문자열 열을 추가했습니다.

.awk파일은 다음과 같습니다.

BEGIN {FS=";";OFS=","}
{
    value=0
    if($7=="KO") {
        value=1
    }
    print "Measure_QS",$7,value,$11 
}

이 파일을 사용하십시오:

gawk -f converter.awk Dataset.csv | head -n 10

다음 콘텐츠를 제공하세요.

Measure_QS,result,0,time_stamp
Measure_QS,OK,0,2020-01-17 11:53:33.000
Measure_QS,OK,0,2020-01-17 11:53:22.000
Measure_QS,OK,0,2020-01-17 11:51:42.000
Measure_QS,OK,0,2020-01-17 11:51:30.000
Measure_QS,OK,0,2020-01-17 11:51:06.000
Measure_QS,OK,0,2020-01-17 11:50:53.000
Measure_QS,OK,0,2020-01-17 11:50:41.000
Measure_QS,OK,0,2020-01-17 11:50:29.000
Measure_QS,OK,0,2020-01-17 11:50:17.000

제목은 Measure_QS,result,0,time_stamp다음과 같습니다.Measure_QS,result,value,time_stamp

내가 어디서 잘못됐나요?

답변1

NR변수를 사용하여 이 문제를 해결할 수 있었습니다.gawk

BEGIN {FS=";";OFS=",";print "measurement","result","value","time_stamp"}
{
    value=0
    if(NR!=1) {
        if($7=="KO") {
            value=1
        }
        print "Measure_QS",$7,value,$11
    }
}

이것은 잘 작동합니다

gawk -f converter.awk Dataset.csv | head -n 10
measurement,result,value,time_stamp
Measure_QS,OK,0,2020-01-17 11:53:33.000
Measure_QS,OK,0,2020-01-17 11:53:22.000
Measure_QS,OK,0,2020-01-17 11:51:42.000
Measure_QS,OK,0,2020-01-17 11:51:30.000
Measure_QS,OK,0,2020-01-17 11:51:06.000
Measure_QS,OK,0,2020-01-17 11:50:53.000
Measure_QS,OK,0,2020-01-17 11:50:41.000
Measure_QS,OK,0,2020-01-17 11:50:29.000
Measure_QS,OK,0,2020-01-17 11:50:17.000

관련 정보