File1.csvから2つのファイルの列名が同じFile2.csvに値を抽出する方法

File1.csvから2つのファイルの列名が同じFile2.csvに値を抽出する方法

すべての列を含むdatafile.csvがあります。

col1^col2^col3^col4^col5..^up-to col'n'

extractfile.csvからcolumnName^Valueを含むデータの各行を読み取る方法

サンプル:

Row1:
col2^NY
col1^2017
col3^17:50
col5^Robert

Row2:
col2^NJ
col1^2015
col4^BMW|i8
col5^Cable,Mathew

datafile.csvの対応する列の下に値を配置します。ここで(extractfile.csv[$columname]=datafile.csv[$columname])

予想出力:

col1^col2^col3^col4^col5..^col'n'
2017^NY^17:50^null^Robert^..^null^
2015^NJ^null^BMW|i8^Cable,Mathew^..^null^

メモ:列に関するデータがない場合は、出力.csvでそのフィールドをnullに設定する必要があります。区切り記号は^です。

よろしくお願いします。

ベストアンサー1

awk -F"^" '
    NR==1{
        col=split($0,H)
        print
        next
    }
    /:$/{
        C[++i] = $0
    }
    NF > 1{
        D[C[i],$1] = $2
    }
    END{
        for(c in C)
            for(h in H)
                val = "null"
                if(D[C[c],H[h]])
                    val = D[C[c],H[h]]          
                if(h < col)
                    printf "%s" FS, val
                else
                    print val
    }
    ' datafile.csv extractfile.csv

生産

col1^col2^col3^col4^col5^col'n'
2017^NY^17:50^null^Robert^null
2015^NJ^null^BMW|i8^Cable,Mathew^null

おすすめ記事