CSV присоединиться из командной строки - PullRequest
0 голосов
/ 21 мая 2019

У меня есть два файла CSV, и я хотел бы объединить их и обогатить CSV1 данными из CSV2. Оба они имеют одинаковый столбец B.

CSV1:

A,B,C,D,E
1,2,3,,
1,2,3,,
1,2,3,,

CSV2:

B,D,E
2,4,5
2,4,5
2,4,5

Хотелось бы иметь:

A,B,C,D,E
1,2,3,4,5
1,2,3,4,5
1,2,3,4,5

Какой лучший способ сделать это? Считайте, что в файлах 2 миллиона строк.

Ответы [ 2 ]

0 голосов
/ 21 мая 2019

Вот один из циклов awk file1 и использование getline для чтения из file2:

$ awk 'BEGIN {
    FS=OFS=","                                   # separators
    file="file2"                                 # set file2 name
}
{
    printf "%s,%s,%s",$1,$2,$3                   # output from file1
    print (getline < file > 0? OFS $2 OFS$3:"")  # and from file2 if records left
}
END {                                            # after processing file1...
    while(getline < file)                        # continue with lines from...
        print "","","",$2,$3                     # file2 if any left
}' file1

Выведите, если file2> file1 (> означает число записей):

A,B,C,D,E
1,2,3,4,5
1,2,3,4,5
1,2,3,4,5
,,,4,5

и если file1> file2:

A,B,C,D,E
1,2,3,4,5
1,2,3,4,5
1,2,3
0 голосов
/ 21 мая 2019

Извлеките столбцы 1–3 из CSV1 и 2 и 3 из CSV2, используя cut, объедините их, используя paste с пользовательским разделителем ,.

$ paste -d, <(cut -d, -f1-3 CSV1) <(cut -d, -f2,3 CSV2)
A,B,C,D,E
1,2,3,4,5
1,2,3,4,5
1,2,3,4,5
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...