используйте awk для левого внешнего соединения двух CSV-файлов на основе нескольких столбцов, сохраняя порядок первого файла наблюдений - PullRequest
0 голосов
/ 01 октября 2019

У меня есть два файла CSV.

Файл 1

ID,Name,Gender,Salary,DOB
11,Jim,M,200,90
12,David,M,100,89
12,David,M,300,89
13,Lucy,F,150,86
14,Lily,F,200,85
13,Lucy,F,100,86

Файл 2

DOB,Name,Children
90,Jim,2
88,Michael,4
88,Lily,1
85,Lily,0

Что я хочу сделать, это оставить внешнее объединение файла 2 вФайл 1 основан на DOB и Имени, сохраняя порядок наблюдения Файла 1. Таким образом, ожидается, что результат будет

ID,Name,Gender,Salary,DOB,Children
11,Jim,M,200,90,2
12,David,M,100,89,
12,David,M,300,89,
13,Lucy,F,150,86,
14,Lily,F,200,85,0
13,Lucy,F,100,86,

Я узнал, что нам нужно отсортировать данные, если мы используем команду join. Поэтому мне было интересно, смогу ли я использовать awk для своей работы. Но я новичок с awk. Кто-нибудь может мне помочь? Кстати, если данные очень большие, могу ли я добавить команду print в awk, но просто использовать > *.csv для сохранения в новый CSV-файл? Это потому, что я нашел решения некоторых смежных вопросов на этом сайте, часто используемом {print ...}. Спасибо.

1 Ответ

1 голос
/ 01 октября 2019

awk на помощь!

$ awk -F, 'NR==FNR{a[$1,$2]=$3; next} {print $0 FS a[$NF,$2]}' file2 file1

ID,Name,Gender,Salary,DOB,Children
11,Jim,M,200,90,2
12,David,M,100,89,
12,David,M,300,89,
13,Lucy,F,150,86,
14,Lily,F,200,85,0
13,Lucy,F,100,86,

join потребуется отсортированный ввод, и вам понадобятся украшения, чтобы восстановить первоначальный порядок. Вы можете перенаправить вывод в файл, добавив > outputfile.csv

...