awkスクリプトが最後の2つのフィールドを混乱させる理由は何ですか?

awkスクリプトが最後の2つのフィールドを混乱させる理由は何ですか?

私の作業文書は次のとおりです。

Time[s]       A_in          B_in          C_in          D_in          E_in
0.000000E+00  1.120200E-02  1.432000E-01  2.331500E-04  2.349800E-03  2.800000E-03
2.500000E-01  1.751279E-04  1.553696E-01  3.172887E-09  7.512772E-09  5.009619E-09
5.000000E-01  1.741500E-04  1.553710E-01  3.102978E-09  7.609057E-09  4.952014E-09
7.500000E-01  1.733357E-04  1.553721E-01  3.037365E-09  7.730931E-09  4.893341E-09

私が望む出力は

Column_header = ID  Time[s]   A_in    Time[s]   B_in    Time[s]  C_in    Time[s]    D_in   Time[s]   E_in

私の現在のコードの出力は次のとおりです。

Column_header = ID  Time[s]   A_in    Time[s]   B_in    Time[s]  C_in    Time[s]    E_in   Time[s]   D_in

これは私の断片です。

Column_headers=$(awk ' BEGIN{OFS="  ";}
FNR==1 { for (n=1;n<=NF;n++) { if ($n ~ /_in$/) cols[$n]=n; }}

   NR==1 { 
        # print header
        printf "ID" " "
    }
END {
             for (c in cols) {printf " " "Time[s]" "    " c} 

    }

' file.txt

ご覧のように、問題は私のコードが最後の2つの列を台無しにしていることを知っていないことです。

答え1

配列や複雑なコードを必要とせずに、次のことを行うだけです。

$ awk '{ OFS=" Time[s] "; $1="ID"; print; exit }' infile

結果をシェル変数に割り当てます。

$ column_headers=$(awk '{ OFS=" Time[s] "; $1="ID"; print; exit }' infile)
$ echo "$column_headers"
ID Time[s] A_in Time[s] B_in Time[s] C_in Time[s] D_in Time[s] E_in

または、最初のフィールドヘッダー名がわからない場合は、次のようにします。

$ awk '{ OFS=" "$1" "; $1="ID"; print; exit }' infile
ID Time[s] A_in Time[s] B_in Time[s] C_in Time[s] D_in Time[s] E_in

関連情報