GNU/Linux >> Linux Esercitazione >  >> Linux

Come unire più righe in una in un file in Linux

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:

  1. Senza delimitatori:I GenuinelyLoveLinuxShellTipsTutorials!
  2. Con un unico carattere delimitatore:I Genuinely, Love,Linux.Shell,Tips,Tutorials!
  3. 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.


Linux
  1. Come aggiungere più righe a un file?

  2. Come contare le righe in un file in UNIX/Linux

  3. Come unire più righe di nomi di file in una con delimitatore personalizzato?

  4. Come aggiungere il contenuto di più file in un unico file

  5. Come commentare più righe in un file di configurazione di Linux?

Come unire più righe in una in un file in Linux

Come mescolare le linee in un file in Linux

Come invertire le righe in un file in base al carattere in Linux

Come unire più file PDF in un unico PDF in Linux

Come unire/unire più file audio in uno in Linux

Come trovare le righe più lunghe in un file in Linux