Dacă fișierele dvs. sunt fișiere separate prin file (TSV) construite corect, atunci puteți utiliza csvjoin
de la baza Python csvkit
pachet.
Ex. dat:
$ head file1.tsv file2.tsv | pisica -A
==> fișier1.tsv <==$
LogEntryTime^InameId^IPartnerId$
2021-06-05T15:00:53 07^I5lsddf^Iqyutxwr$
$
==> fișier2.tsv <==$
nameId^IGroupId^IcompnayId$
5lsddf^Il4buafm^I0rd33cs$
(pisica -A
pentru a face vizibile filele, ca ^I
) atunci
$ csvjoin -I -t -c nameId file1.tsv file2.tsv
LogEntryTime,nameId,PartnerId,GroupId,compnayId
2021-06-05T15:00:53 07,5lsddf,qyutxwr,l4buafm,0rd33cs
Pentru a obține rezultatul înapoi în format TSV, utilizați csvformat
din acelasi pachet:
$ csvjoin -I -t -c nameId fișier1.tsv fișier2.tsv | csvformat -T
LogEntryTime nameId PartnerId GroupId compnayId
2021-06-05T15:00:53 07 5lsddf qyutxwr l4buafm 0rd33cs
Rețineți că -Eu
dezactivează inferența de tip - care se poate comporta uneori în mod neașteptat, în special cu câmpurile datetime.
Și mai simplu, folosind Miller (disponibil din depozitul universului, ca pachet morar
):
$ mlr --tsv join -f file1.tsv -j nameId apoi reordonează -f LogEntryTime file2.tsv
LogEntryTime nameId PartnerId GroupId compnayId
2021-06-05T15:00:53 07 5lsddf qyutxwr l4buafm 0rd33cs
The reordonează
este necesar deoarece implicit mlr join
scoate mai întâi câmpul comun (la fel ca sistemul a te alatura
comanda). Rețineți că pentru intrare nesortată, întregul fișier1.tsv
va fi încărcat în memorie.