Come usare il comando join su Linux

Un prompt del terminale pronto per un comando su un sistema Linux.

Fatmawati Achmad Zaenuri/Shutterstock



Se vuoi unire i dati da due file di testo facendo corrispondere un campo comune, puoi usare Linux |_+_| comando. Aggiunge un pizzico di dinamismo ai tuoi file di dati statici. Ti mostreremo come usarlo.

Corrispondenza dei dati tra i file

I dati sono re. Le aziende, le imprese e le famiglie lo corrono allo stesso modo. Ma i dati archiviati in file diversi e raccolti da persone diverse sono una seccatura. Oltre a sapere quali file aprire per trovare le informazioni desiderate, è probabile che il layout e il formato dei file siano diversi.





Devi anche affrontare il mal di testa amministrativo relativo a quali file devono essere aggiornati, di cui è necessario eseguire il backup, quali sono legacy e quali possono essere archiviati.

Inoltre, se hai bisogno di consolidare i tuoi dati o condurre alcune analisi su un intero set di dati, hai un ulteriore problema. Come razionalizzi i dati tra i diversi file prima di poter fare ciò che devi fare con essi? Come affronti la fase di preparazione dei dati?



La buona notizia è che se i file condividono almeno un elemento di dati comune, Linux |_+_| il comando può tirarti fuori dal pantano.

I file di dati

Tutti i dati che useremo per dimostrare l'uso del |_+_| comando è fittizio, a partire dai seguenti due file:

join join



Quello che segue è il contenuto di |_+_|:

joinAnnuncio pubblicitario

Abbiamo una serie di righe numerate e ogni riga contiene tutte le seguenti informazioni:

    Un numero Un nome un cognome Un indirizzo email Il sesso della persona Un indirizzo IP

Quello che segue è il contenuto di |_+_|:

file-1.txt

Ogni riga in |_+_| contiene le seguenti informazioni:

    Un numero un cognome Un indirizzo email Il sesso della persona Una regione di New York Un valore in dollari

Il |_+_| Il comando funziona con i campi, che, in questo contesto, significa una sezione di testo circondata da spazi, l'inizio di una riga o la fine di una riga. Per |_+_| per abbinare le righe tra i due file, ogni riga deve contenere un campo comune.

Pertanto, possiamo abbinare un campo solo se appare in entrambi i file. L'indirizzo IP appare solo in un file, quindi non va bene. Il nome appare solo in un file, quindi non possiamo usare neanche quello. Il cognome è in entrambi i file, ma sarebbe una scelta sbagliata, poiché persone diverse hanno lo stesso cognome.

Non puoi nemmeno collegare i dati insieme alle voci maschili e femminili, perché sono troppo vaghe. Anche le regioni di New York e i valori in dollari vengono visualizzati in un solo file.

Tuttavia, possiamo utilizzare l'indirizzo e-mail perché è presente in entrambi i file e ognuno è unico per un individuo. Una rapida occhiata ai file conferma anche che le righe in ciascuno corrispondono alla stessa persona, quindi possiamo usare i numeri di riga come campo da abbinare (in seguito useremo un campo diverso).

Annuncio pubblicitario

Nota che ci sono un diverso numero di campi nei due file, il che va bene: possiamo dire |_+_| quale campo utilizzare da ogni file.

Tuttavia, fai attenzione a campi come le regioni di New York; in un file separato da spazi, ogni parola nel nome di una regione ha l'aspetto di un campo. Poiché alcune regioni hanno nomi di due o tre parole, hai effettivamente un numero diverso di campi all'interno dello stesso file. Questo va bene, a patto che corrisponda ai campi che appaiono nella riga prima delle regioni di New York.

Il comando di unione

Innanzitutto, il campo che stai per abbinare deve essere ordinato. Abbiamo numeri crescenti in entrambi i file, quindi soddisfiamo questi criteri. Per impostazione predefinita, |_+_| usa il primo campo in un file, che è quello che vogliamo. Un'altra impostazione predefinita è che |_+_| si aspetta che i separatori di campo siano spazi bianchi. Di nuovo, ce l'abbiamo, quindi possiamo andare avanti e accendere |_+_|.

Poiché utilizziamo tutte le impostazioni predefinite, il nostro comando è semplice:

file-2.txt

|_+_| considera i file come file uno e file due in base all'ordine in cui sono elencati nella riga di comando.

L'output è il seguente:

file-2.txt

L'output è formattato nel modo seguente: Viene stampato per primo il campo su cui sono state confrontate le righe, seguito dagli altri campi del file uno e quindi dai campi del file due senza il campo di confronto.

Campi non ordinati

Proviamo qualcosa che sappiamo non funzionerà. Metteremo le righe in un file fuori ordine così |_+_| non sarà in grado di elaborare il file correttamente. Il contenuto di |_+_| sono gli stessi di |_+_|, ma la riga otto è tra le righe cinque e sei.

Quello che segue è il contenuto di |_+_|:

joinAnnuncio pubblicitario

Digitiamo il seguente comando per provare a unire |_+_|a |_+_|:

join

|_+_| riporta che la settima riga in |_+_| è fuori servizio, quindi non viene elaborato. La riga sette è quella che inizia con il numero sei, che dovrebbe precedere l'otto in un elenco correttamente ordinato. La sesta riga nel file (che inizia con 8 Odell) è stata l'ultima elaborata, quindi ne vediamo l'output.

Puoi usare il |_+_| opzione se vuoi vedere se |_+_| è soddisfatto dell'ordinamento di un file: non verrà tentata alcuna fusione.

Per farlo, digitiamo quanto segue:

join

|_+_| ti dice in anticipo che ci sarà un problema con la riga sette del file |_+_|.

File con righe mancanti

In |_+_|, l'ultima riga è stata rimossa, quindi non c'è una riga otto. I contenuti sono i seguenti:

joinAnnuncio pubblicitario

Digitiamo quanto segue e, sorprendentemente, |_+_| non si lamenta ed elabora tutte le righe che può:

join

L'output elenca sette righe unite.

Il |_+_| (stampa non abbinabile) opzione dice |_+_| per stampare anche le righe che non possono essere abbinate.

Qui, digitiamo il seguente comando per dire |_+_| per stampare le righe del file uno che non possono essere abbinate alle righe del file due:

join

Sette righe sono abbinate e la riga otto del file uno viene stampata, senza corrispondenza. Non ci sono informazioni unite perché |_+_| non conteneva una riga otto a cui potesse essere abbinato. Tuttavia, almeno appare ancora nell'output in modo da sapere che non ha una corrispondenza in |_+_|.

Digitiamo quanto segue |_+_| (sopprimi le righe unite) per rivelare le righe che non hanno una corrispondenza:

join

Vediamo che la riga otto è l'unica che non ha una corrispondenza nel file due.

Corrispondenza con altri campi

Abbiniamo due nuovi file su un campo che non è quello predefinito (campo uno). Quello che segue è il contenuto del file-7.txt:

join

E quello che segue è il contenuto di file-8.txt:

file-3.txtAnnuncio pubblicitario

L'unico campo sensato da utilizzare per l'adesione è l'indirizzo email, che è il campo uno nel primo file e il campo due nel secondo. Per adattarsi a questo, possiamo usare il |_+_| (archivia un campo) e |_+_| (file due campi) opzioni. Seguiremo questi con un numero che indica quale campo in ogni file deve essere utilizzato per l'adesione.

Digitiamo quanto segue per dire |_+_| per utilizzare il primo campo nel file uno e il secondo nel file due:

file-2.txt

I file vengono uniti nell'indirizzo e-mail, che viene visualizzato come primo campo di ogni riga nell'output.

Utilizzo di separatori di campo diversi

Cosa succede se hai file con campi separati da qualcosa di diverso dagli spazi bianchi?

I due file seguenti sono delimitati da virgole: l'unico spazio bianco è tra i nomi di luoghi composti da più parole:

file-3.txt file-3.txt

Annuncio pubblicitario

Possiamo usare il |_+_| (carattere separatore) per dire |_+_| quale carattere utilizzare come separatore di campo. In questo caso, è la virgola, quindi digitiamo il seguente comando:

file-1.txt

Tutte le linee sono abbinate e gli spazi sono conservati nei toponimi.

Ignorando maiuscole e minuscole

Un altro file, |_+_|, è quasi identico a |_+_|. L'unica differenza è che alcuni indirizzi e-mail hanno una lettera maiuscola, come mostrato di seguito:

join

Quando ci siamo uniti |_+_| e |_+_|, ha funzionato perfettamente. Vediamo cosa succede con |_+_| e |_+_|.

Digitiamo il seguente comando:

file-3.txt

Abbiamo abbinato solo sei righe. Le differenze tra lettere maiuscole e minuscole hanno impedito l'unione degli altri due indirizzi e-mail.

Annuncio pubblicitario

Tuttavia, possiamo usare |_+_| (ignora maiuscole e minuscole) opzione per forzare |_+_| per ignorare quelle differenze e confrontare i campi che contengono lo stesso testo, indipendentemente dal caso.

Digitiamo il seguente comando:

--check-order

Tutte le otto linee sono abbinate e unite con successo.

Mescolare e abbinare

In |_+_|, hai un potente alleato quando sei alle prese con una complicata preparazione dei dati. Forse hai bisogno di analizzare i dati, o forse stai cercando di modellarli in forma per eseguire un'importazione in un sistema diverso.

Non importa quale sia la situazione, sarai felice di avere |_+_| nel tuo angolo!

Comandi Linux
File catrame · pv · gatto · tac · chmod · presa · differenza · sed · Con · uomo · spinto · popd · fsck · testdisk · seguito · fd · pandoc · cd · $PATH · awk · giuntura · jq · piega · unico · journalctl · coda · stato · ls · fstab · buttato fuori · meno · chgrp · chown · rev · Guarda · stringhe · genere · rinominare · cerniera lampo · decomprimere · montare · smontare · installare · fdisk · mkfs · rm · rmdir · rsync · df · gpg · noi · nano · mkdir · a partire dal · ln · toppa · convertire · rclone · brandello · SRM
Processi alias · schermo · superiore · Bello · renice · progresso · strace · sistema · tmux · chsh · storia · in · lotto · libero · quale · dmesg · usermod · ps · chroot · xargs · tty · mignolo · lsof · vmstat · tempo scaduto · parete · · uccisione · dormire · sudo · il suo · volta · gruppoaggiungi · usermod · gruppi · lshw · spegnimento · riavviare · fermare · spegni · passwd · lscpu · crontab · Data · bg · fg
Rete netstat · ping · traceroute · ip · ss · chi è · fail2ban · bmon · voi · dito · nmap · ftp · arricciare · wget · chi · chi sono · In · iptables · ssh-keygen · ufw

IMPARENTATO: I migliori laptop Linux per sviluppatori e appassionati

LEGGI SUCCESSIVO Foto del profilo di Dave McKay Dave McKay
Dave McKay ha usato per la prima volta i computer quando era in voga il nastro di carta perforata, e da allora ha programmato. Dopo oltre 30 anni nel settore IT, ora è un giornalista tecnologico a tempo pieno. Durante la sua carriera ha lavorato come programmatore freelance, manager di un team internazionale di sviluppo software, project manager di servizi IT e, più recentemente, come Data Protection Officer. I suoi scritti sono stati pubblicati da howtogeek.com, cloudavvyit.com, itenterpriser.com e opensource.com. Dave è un evangelista di Linux e un sostenitore dell'open source.
Leggi la biografia completa

Articoli Interessanti