OFS를 사용하여 연관 배열을 인쇄하는 awk

OFS를 사용하여 연관 배열을 인쇄하는 awk

다음 awk코드가 있습니다. 먼저 헤더 줄에서 관심 있는 필드 번호를 결정한 다음 해당 필드의 출력을 인쇄합니다. 문제는 관심 있는 필드 번호를 유지하기 위해 연관 배열을 사용하고 있으므로 for루프 에서 인쇄하고 print대신 printf. 문제는 줄 끝에 구분 기호를 추가한다는 것입니다.

이 문제를 해결할 간단한 방법이 있습니까?예를 들어출력을 다시 실행하고 추가 구분 기호를 제거합니까? 아니면 숫자가 배열에 저장된 필드를 인쇄하는 더 좋은 방법이 있습니까?

awk '
    BEGIN {
        FS = ","; OFS = ","
        no_headers = 2; headers[1] = "header1"; headers[2] = "header3"
        k = 0
    }

    NR==1 {
        for (i=1; i<=no_headers; i++) {
            for (j=1; j<=NF; j++) {
                s = gensub(/"/, "", "g", $j)
                if (s==headers[i]) { col_no[++k] = j }
            }
        }
    }

    NR>1 {
        for (i=1; i<=k; i++) { printf "%s,", $col_no[i] }
        print ""
    }' test_awk.txt

테스트 파일은 다음과 같습니다

"header1","header2","header3","header4"
"a","b","c",4
1,"b",,"d"
"a","2","c","d"

현재 내 출력은 다음과 같습니다

"a","c",
1,,
"a","c",

하지만 난 이렇게 생겼으면 좋겠어(, 후행 구분 기호 없음)

"a","c"
1,
"a","c"

답변1

명령문을 수정하여 형식 지정자에서 printf()를 제거 하고 부분 안에 추가하십시오. 삼항 연산자를 사용하여 마지막 필드가 아닌 경우 추가,{..},

printf "%s", (i==k) ? $col_no[i] : $col_no[i]","

관련 정보