2017-12-05 3 views
0

Ich habe Daten im unteren Format in einer Textdatei.Zeilen zusammenführen, wenn: vorhanden ist Shell-Skript

desc   : Abced ONE 12345678 Suites YUITREWQ & RTYUIO Mana 
gement 
ldesc   : Abced ONE 12345678 Suites YUITREWQ & RTYUIO Man 
agement (BCD-WQ-UIO, BCD-WQ-BN) 
date       : 

Ich versuche, die Ausgabe im unteren Format zu bekommen.

desc       : Abced ONE 12345678 Suites YUITREWQ & RTYUIO Management 
ldesc       : Abced ONE 12345678 Suites YUITREWQ & RTYUIO Management (BCD-WQ-UIO, BCD-WQ-BN) 

Grundsätzlich mag ich jede Zeile, den Doppelpunkt, aber nichts nach einem Doppelpunkt hat, soll gelöscht werden, und wenn jede Zeile es keinen Doppelpunkt sollte mit vorheriger Reihe einschließlich Raumes, wenn eine zusammengefügt werden.

Ich versuchte mit awk, aber ich kann nicht fortfahren.

Grüße.

+0

Kann es mehr als 3 Zeilen geben? wenn 'awk' /: $/{next} {ORS = /: /? "": "\ n"} 1 'Datei' funktioniert nicht, dann überlege, ob die Eingabe besser ist – Sundeep

Antwort

0

Um eine Zeile mit der vorherige Zeile zu fusionieren, müssen Sie die Newline Druck vermeiden, bis Sie wissen, ob oder nicht fusionieren. Vergessen Sie nicht, den letzten Zeilenumbruch zu drucken, wenn Sie das Ende der Datei erreicht haben!

awk '/:./ { printf "%s", $0; pending=1; next } 
    /:$/ { if (pending) printf "\n"; pending=0; next } 
    pending { printf "%s\n", $0; pending=0 } 
    END { if (pending) printf "\n" }' file 
+0

Hallo, Das Problem damit ist, dass es alle neue Zeile entfernt. So kommen alle Daten in einer einzigen Zeile. – user2854333

+0

Es schien mit den Testdaten in der Frage zu arbeiten. Können Sie Daten zeigen, für die sie das tut, was Sie beschreiben? – tripleee

+0

Eigentlich habe ich einen Eckfall gefunden, der falsch war, und ich habe den Code jetzt entsprechend aktualisiert. Das tut mir leid. – tripleee

0

Angenommen, Ihre Dateinamen exp1.txt

awk -F: 'length($2) { print $0 }' exp1.txt 

Sie erhielten Ihr Ergebnis erwarten!

meine Ausgabe:

(public)landpacks-MacBook-Pro:stackoverflow frank$ cat exp1.txt 
desc   : Abced ONE 12345678 Suites YUITREWQ & RTYUIO Mana 
gement 
ldesc   : Abced ONE 12345678 Suites YUITREWQ & RTYUIO Man 
agement (BCD-WQ-UIO, BCD-WQ-BN) 
date       : 
(public)landpacks-MacBook-Pro:stackoverflow frank$ awk -F: 'length($2) { print $0 }' exp1.txt 
desc   : Abced ONE 12345678 Suites YUITREWQ & RTYUIO Mana 
ldesc   : Abced ONE 12345678 Suites YUITREWQ & RTYUIO Man 
(public)landpacks-MacBook-Pro:stackoverflow frank$ 
+0

Es funktioniert nicht. Vielleicht war ich nicht klar mit Daten. Ich habe die Daten erneut korrigiert. – user2854333

+0

@ user2854333 bereits aktualisieren Antwort! –

+0

Vielen Dank für Ihre Hilfe :) – user2854333

Verwandte Themen