GNU/Linux >> Linux Esercitazione >  >> Linux

Linux - Dividi una singola riga in più righe, carattere di nuova riga mancante per tutte le righe nel file di input?

Questa domanda ha già risposte qui :Come elaborare un file di testo a più colonne per ottenere un altro file di testo a più colonne?

(7 risposte)
Chiuso 3 anni fa.

C'è un modo per dividere una singola riga in più righe con 3 colonne.
Alla fine di tutte le righe nel file mancano caratteri di nuova riga.

Ho provato a usare awk, ma divide ogni colonna come una riga invece di 3 colonne in ogni riga.

awk '{ gsub(",", "n") } 6' filename

dove filename Il contenuto è simile a:

A,B,C,D,E,F,G,H,I,J,K,L,M,N,O

L'output desiderato ha 3 colonne in ogni riga:

A,B,C
D,E,F
G,H,I
J,K,L
M,N,O

Risposta accettata:

Utilizzo di awk

$ awk -v RS='[,n]' '{a=$0;getline b; getline c; print a,b,c}' OFS=, filename
A,B,C
D,E,F
G,H,I
J,K,L
M,N,O

Come funziona

  • -v RS='[,n]'

    Questo dice ad awk di usare qualsiasi occorrenza di una virgola o di una nuova riga come separatore di record.

  • a=$0; getline b; getline c

    Questo dice ad awk di salvare la riga corrente nella variabile a , la riga successiva nella variabile b , e la riga successiva nella variabile c .

  • print a,b,c

    Questo dice ad awk di stampare a , b e c

  • OFS=,

    Questo dice a awk di usare una virgola come separatore di campo nell'output.

Utilizzo di tr e paste

$ tr , 'n' <filename | paste -d, - - -
A,B,C
D,E,F
G,H,I
J,K,L
M,N,O

Come funziona

  • tr , 'n' <filename

    Questo legge dal nome del file durante la conversione di tutte le virgole in nuove righe.

  • paste -d, - - -

    Questo paste per leggere tre righe da stdin (una per ogni - ) e incollarli insieme, ciascuno separato da una virgola (-d, ).

Awk alternativo

$ awk -v RS='[,n]' '{printf "%s%s",$0,(NR%3?",":"n")}' filename
A,B,C
D,E,F
G,H,I
J,K,L
M,N,O

Come funziona

  • -v RS='[,n]'

    Questo dice ad awk di usare qualsiasi occorrenza di una virgola o di una nuova riga come separatore di record.

  • printf "%s%s",$0,(NR%3?",":"n")

    Questo dice a awk di stampare la riga corrente seguita da una virgola o da una nuova riga a seconda del valore del numero di riga corrente, NR , modulo 3.


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

  2. 9 esempi utili del comando Split in Linux

  3. Popsicle – Flasher di file USB multipli per Linux

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

  5. Trasformare più righe in una riga separata da virgole

3 gestori di password per la riga di comando di Linux

Come dividere un file di archivio di grandi dimensioni in più file di piccole dimensioni utilizzando il comando Dividi in Linux

Come dividere un file di archivio di grandi dimensioni in più file di piccole dimensioni utilizzando il comando Dividi in Linux

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

Visualizza il contenuto di un file nella riga di comando di Linux

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