Использованиеjoin
:
join -t, -a 1 -1 8 -2 1 file1.txt file2.txt
Использованиеawk
:
Сохраните содержимое первого файла в массиве с соответствующим индексом в качестве ключа и вызовите его при обработке второго файла:
awk -F "," '
FILENAME=="file1.txt"{row[$8]=$0}
FILENAME=="file2.txt"{OFS=","; print row[$1],$2}
' file*.txt
Для ваших новых требований:
awk -F "," '
FILENAME=="file1.txt"{row[$8]=$0}
FILENAME=="file2.txt"{row[$1]=row[$1]","$2}
END{ for (i in row) print row[i] }
' file*.txt
Обратите внимание, это изменит сортировку .
Использованиеcsvsql
:
Это также хороший вариант использования для csvsql
, особенно потому, что приведенные выше решения не будут работать, если у вас есть текстовое поле с кавычками и разделителем внутри кавычек:
csvsql -H \
--query "select file1.*, file2.b from file1 left join file2 on file1.h == file2.a" \
file*.txt