awk 使用 OFS 列印關聯數組

awk 使用 OFS 列印關聯數組

我有以下awk程式碼。它首先確定標題行中感興趣的字段號,然後列印這些字段的輸出。問題是我使用關聯數組來保留感興趣的字段編號,因此我在循環中打印出來,而不是for使用.它的問題是它還在行尾添加了分隔符號。printprintf

有沒有簡單的方法可以解決這個問題(沒有例如再次運行輸出並刪除額外的分隔符號)?或者是否有更好的方法來列印其編號儲存在數組中的欄位?

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",

但我希望它看起來像這樣(IE,沒有尾隨分隔符號)

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

答案1

修改您的語句以從格式說明符中printf()刪除並將其新增至該部分內。使用三元運算子附加if not 到最後一個字段,{..},

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

相關內容