Периодически бывают задачи, где нужно объединить данные из нескольких не очень больших csv файлов.
Сделать что-то вроде select f1.*,f2.* from 1.csv f1 left join 2.csv f2 on f1.c = f2.c;
Обычно я делаю какую-то одноразовую ерунду типа такой:
tail -n +2 1.csv | (while read -r line; do
colC="$(echo "$line" | awk -F',' '{print $3}')";
matches="$(tail -n +2 2.csv | awk -F',' '{print $2"|"$0}' | grep -E "^$colC\|" | sed 's/^[^|]*|//;s/^/;/' | tr -d '\n');"
echo "$line$matches";
done)
исходные файлы:
1.txt:
A,B,C
foo1,bar1,10
foo2,bar3,20
foo3,bar3,30
__
2.txt:
E,C,D
buz20,20,20
buz10,10,10
buz11,10,11
Выхлоп:
foo1,bar1,10;buz10,10,10;buz11,10,11;
foo2,bar3,20;buz20,20,20;
foo3,bar3,30;
Как подобное делать нормальнее? Больше интересует короткий и понятный вариант чем производительный.