Nel tutorial di oggi sulla gestione dei file Linux, esamineremo approcci validi per unire più righe all'interno di un file in un'unica riga. Entro la fine di questo articolo, avrai aggiunto alcune pietre miliari dell'informatica alla tua esperienza di gestione dei file Linux.
[ Potrebbe piacerti anche:Come unire due file di testo in Linux ]
Le possibilità/opportunità per gli utenti che sfruttano il sistema operativo Linux tramite l'interfaccia a riga di comando continuano ad essere infinite. Una di queste possibilità è manipolare un file a più righe in un file a riga singola tramite una serie di comandi Linux. L'obiettivo dell'unione di tali righe può essere tanto semplice quanto la necessità di aggiungere delimitatori personalizzati al file di destinazione.
Dichiarazione del problema
Poiché questo tutorial si concentrerà sull'unione di più righe in una singola riga su un file di destinazione, è necessario creare questo tipo di file a scopo di riferimento e popolarlo con alcuni dati su più righe.
$ sudo nano sample_file.txt
Come per l'acquisizione dello schermo sopra, abbiamo a che fare con un file (sample_file.txt ) con sei linee e ci sono tre approcci per unire queste sei linee:
- Senza delimitatori:I GenuinelyLoveLinuxShellTipsTutorials!
- Con un unico carattere delimitatore:I Genuinely, Love,Linux.Shell,Tips,Tutorials!
- Con più caratteri delimitatori:I Sinceramente;Amo;Linux;Shell;Suggerimenti;Tutorial!
Come unire più righe in una singola riga in un file
Diamo un'occhiata a questi tre approcci per unire più righe all'interno di un file in una singola riga in Linux.
1. Usando il comando sed
Il potere del sed l'utilità della riga di comando per l'elaborazione del testo ci consentirà di unire le sei righe nel nostro file di testo di esempio affrontando i tre approcci discussi sopra in riferimento quasi alla stessa sintassi del codice.
Senza delimitatori:
$ sed ':a; N; $!ba; s/\n//g' sample_file.txt
Con spaziatura:
$ sed ':a; N; $!ba; s/\n/ /g' sample_file.txt
Con un singolo carattere delimitatore, ad es. una virgola:
$ sed ':a; N; $!ba; s/\n/,/g' sample_file.txt
Con più caratteri delimitatore ad es. punto e virgola e spazio bianco:
$ sed ':a; N; $!ba; s/\n/; /g' sample_file.txt
2. Usando il comando awk
Il ahk di Linux command è un altro affidabile strumento da riga di comando per l'elaborazione del testo. Il suo approccio alla soluzione del nostro problema da multilinea a linea singola può essere analizzato e implementato nel modo seguente:
Senza delimitatori:
$ awk -v d="" '{s=(NR==1?s:s d)$0}END{print s}' sample_file.txt
Con spaziatura:
$ awk -v d=" " '{s=(NR==1?s:s d)$0}END{print s}' sample_file.txt
Con un singolo carattere delimitatore, ad es. una virgola:
$ awk -v d="," '{s=(NR==1?s:s d)$0}END{print s}' sample_file.txt
Con più caratteri delimitatore ad es. punto e virgola e spazio bianco:
$ awk -v d="; " '{s=(NR==1?s:s d)$0}END{print s}' sample_file.txt
3. Usando il comando incolla
La incolla comando è ideale solo per unire più righe senza delimitatori, con spaziatura e con un delimitatore di carattere singolo. Questa utilità risiede in GNU Coreutils pacchetto da qui la sua disponibilità su tutte le distribuzioni del sistema operativo Linux.
Senza delimitatori:
$ paste -sd '' sample_file.txt
Con spaziatura:
$ paste -sd ' ' sample_file.txt
Con un singolo carattere delimitatore, ad es. un trattino basso:
$ paste -sd '_' sample_file.txt
Il trattino di sottolineatura finale (_)
può essere rimosso collegando il comando paste a un comando sed:
$ paste -sd '_' sample_file.txt | sed 's/_$/\n/'
Questo approccio non è l'ideale con più caratteri delimitatori, ad esempio un punto e virgola e uno spazio bianco a causa di output irregolari come il seguente:
$ paste -sd '; ' sample_file.txt
4. Usando il comando tr
Il comando tr è ideale anche per unire più righe senza delimitatori, con spaziatura e con un unico carattere delimitatore.
Senza delimitatori:
$ tr -d '\n' < sample_file.txt
Con spaziatura:
$ tr '\n' ' ' < sample_file.txt
Con un singolo carattere delimitatore, ad es. una virgola:
$ tr '\n' ',' < sample_file.txt
Invia l'output a un comando sed per eliminare le virgole extra.
$ tr '\n' ',' < sample_file.txt | sed 's/,,$/\n/'
Abbiamo imparato con successo come unire più righe in una singola riga in un file in Linux.