Если ваши файлы представляют собой правильно созданные файлы с разделителями табуляции (TSV), вы можете использовать csvjoin
на основе Python csvkit
упаковка.
Бывший. данный:
$ головной файл1.tsv файл2.tsv | кот -А
==> файл1.tsv <==$
LogEntryTime^InameId^IPartnerId$
2021-06-05T15:00:53 07^I5lsddf^Iqyutxwr$
$
==> файл2.tsv <==$
nameId^IGroupId^IcompnayId$
5lsddf^Il4buafm^I0rd33cs$
(кот -А
сделать вкладки видимыми, т.к. ^ я
) тогда
$ csvjoin -I -t -c nameId file1.tsv file2.tsv
LogEntryTime, nameId, PartnerId, GroupId, compnayid
2021-06-05T15:00:53 07,5lsddf,qyutxwr,l4buafm,0rd33cs
Чтобы вернуть вывод в формате TSV, используйте CSVформат
из того же пакета:
$ csvjoin -I -t -c nameId file1.tsv file2.tsv | CSVформат -T
LogEntryTime nameId PartnerId GroupId compnayId
2021-06-05T15:00:53 07 5lsddf qyutxwr l4buafm 0rd33cs
Обратите внимание, что -Я
отключает вывод типа, который иногда может вести себя неожиданно, особенно с полями даты и времени.
Еще проще, используя Миллер (доступен в репозитории юниверса в виде пакета мельник
):
$ mlr --tsv join -f file1.tsv -j nameId then reorder -f LogEntryTime file2.tsv
LogEntryTime nameId PartnerId GroupId compnayId
2021-06-05T15:00:53 07 5lsddf qyutxwr l4buafm 0rd33cs
Изменение порядка
необходимо, потому что по умолчанию млр присоединиться
сначала выводит общее поле (так же, как система присоединиться
команда). Обратите внимание, что для несортированного ввода все файл1.tsv
будет загружен в память.