Как извлечь значение из File1.csv в File2.csv, где имена столбцов в обоих файлах одинаковы

У меня есть datafile.csv со всеми столбцами

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

Как мне прочитать данные каждой строки в extractfile.csv, содержащей columnName ^ Value

sampleData:

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^

ПРИМЕЧАНИЕ: Если нет данных для столбца, поле должно быть установить значение null в output.csv. Разделитель - ^.

Заранее спасибо.

-1
05.02.2017, 18:07
2 ответа

Немного другой подход. Вызовите его с помощью awk -v RS = "" -vn = 6 -f myprog datafile.csv :

BEGIN {
    for (i = 1; i <= n; i++) {
        result = result "^col" i;
    }
    print substr(result, 2);
}
{
    delete data;
    for (i = 2; i <= NF; i++) {
        split($i, d, "^");
        data[d[1]] = d[2];
    }
    result = "";
    for (i = 1; i <= n; i++) {
        value = data["col"i];
        if (value) {
            result = result "^" value;
        } else {
            result = result "^null";
        }
    }
    print substr(result, 2);
}
0
28.01.2020, 05:13
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
0
28.01.2020, 05:13

Теги

Похожие вопросы