GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Linux – Einzelne Zeile in mehrere Zeilen aufteilen, Newline-Zeichen fehlt für alle Zeilen in der Eingabedatei?

Für diese Frage gibt es hier bereits Antworten :Wie verarbeitet man eine mehrspaltige Textdatei, um eine weitere mehrspaltige Textdatei zu erhalten?

(7 Antworten)
Vor 3 Jahren geschlossen.

Ich kann eine einzelne Zeile in mehrere Zeilen mit 3 Spalten aufteilen.
Neue Zeilenzeichen fehlen am Ende aller Zeilen in der Datei.

Ich habe versucht, awk zu verwenden, aber es teilt jede Spalte in eine Zeile statt in 3 Spalten in jeder Zeile.

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

wobei filename Der Inhalt sieht so aus:

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

Gewünschte Ausgabe hat 3 Spalten in jeder Zeile:

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

Akzeptierte Antwort:

Mit 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

Wie es funktioniert

  • -v RS='[,n]'

    Dies weist awk an, jedes Vorkommen von entweder einem Komma oder einem Zeilenumbruch als Datensatztrennzeichen zu verwenden.

  • a=$0; getline b; getline c

    Dies weist awk an, die aktuelle Zeile in der Variablen a zu speichern , die nächste Zeile in der Variablen b , und die nächste Zeile danach in der Variablen c .

  • print a,b,c

    Dies weist awk an, a auszugeben , b , und c

  • OFS=,

    Dies weist awk an, bei der Ausgabe ein Komma als Feldtrennzeichen zu verwenden.

Mit tr und paste

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

Wie es funktioniert

  • tr , 'n' <filename

    Dies liest aus Dateiname, während alle Kommas in Zeilenumbrüche umgewandelt werden.

  • paste -d, - - -

    Diese paste um drei Zeilen von stdin zu lesen (eine für jeden - ) und fügen Sie sie zusammen, jeweils getrennt durch ein Komma (-d, ).

Alternatives awk

$ 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

Wie es funktioniert

  • -v RS='[,n]'

    Dies weist awk an, jedes Vorkommen von entweder einem Komma oder einem Zeilenumbruch als Datensatztrennzeichen zu verwenden.

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

    Dies weist awk an, die aktuelle Zeile zu drucken, gefolgt von entweder einem Komma oder einem Zeilenumbruch, abhängig vom Wert der aktuellen Zeilennummer, NR , modulo 3.


Linux
  1. Zusätzliche Kopfzeilen außer der ersten Zeile aus der Datei entfernen?

  2. Wie fügt man mehrere Zeilen an eine Datei an?

  3. 9 Nützliche Beispiele für den Split-Befehl in Linux

  4. Wie man Zeilen in einer Datei in UNIX/Linux zählt

  5. Linux - Prüfen Sie, ob am Ende einer Datei eine leere Zeile steht

3 Passwort-Manager für die Linux-Kommandozeile

So teilen Sie eine große Archivdatei mit dem Split-Befehl in Linux in mehrere kleine Dateien auf

So teilen Sie eine große Archivdatei mit dem Split-Befehl in Linux in mehrere kleine Dateien auf

So verbinden Sie mehrere Zeilen in einer Datei in Linux zu einer

Zeigen Sie den Inhalt einer Datei in der Linux-Befehlszeile an

So finden Sie die längste(n) Zeile(n) in einer Datei in Linux