出力

出力

ファイル1があります。

col1=val1|col2=val2|col3=val3|col4=val4
col1=val1|col2=val2|col4=val4|col5=val5|col6=val6
col1=val1|col3=val3|col4=val4|col6=val6
col1=val1|col2=val2|col3=val3|col4=val4|col5=val5|col6=val6

そして、file2の一意の列のリストは次のとおりです。

col1
col2
col3
col4
col5
col6

file2列シーケンスに基づいてパイプ区切り文字を使用して、別のファイル内のfile1からその値を取得する必要があります。

出力は次のとおりです。

val1|val2|val3|val4|||
val1|val2||val4|val5|val6
val1||val3|val4||val6
val1|val2|val3|val4|val5|val6

ベストアンサー1

名前=値のペアでデータを入力するたびに最善の方法は、まず名前->値の配列を作成し、名前付きインデックスでその配列の内容を印刷することです。この場合、これらの名前の順序は他のファイルから来るので、そのファイルを最初に読んでください。

$ cat tst.awk
BEGIN { FS="[=|]"; OFS="|" }
NR==FNR { outFldNames[++numOutFlds]=$0; next }
{
    delete name2val
    for (inFldNr=1; inFldNr<NF; inFldNr++) {
        name2val[$inFldNr] = $(inFldNr+1)
    }

    for (outFldNr=1; outFldNr<=numOutFlds; outFldNr++) {
        printf "%s%s", name2val[outFldNames[outFldNr]], (outFldNr<numOutFlds ? OFS : ORS)
    }
}

$ awk -f tst.awk file2 file1
val1|val2|val3|val4||
val1|val2||val4|val5|val6
val1||val3|val4||val6
val1|val2|val3|val4|val5|val6

おすすめ記事