다음 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]","