Verwenden von awk (oder sed) zum Entfernen von Zeilenumbrüchen basierend auf dem ersten Zeichen der nächsten Zeile

8

Hier ist meine Situation: Ich hatte eine große Textdatei, aus der ich bestimmte Informationen ziehen wollte. Ich habe sed verwendet, um alle relevanten Informationen basierend auf Regexps zu ziehen, aber jedes "Stück" von Informationen, die ich gezogen habe, ist in einer separaten Zeile, ich möchte für jeden "Datensatz" in einer eigenen Zeile sein, damit er leicht importiert werden kann eine DB.
Hier ist eine Auswahl meiner Daten im Moment:

  

92831,499,000
  , 0644321
  79217,999,000
  , 5417178
  , PK91622
  , PK90755

Im Idealfall möchte ich, dass diese Ausgabe wie folgt aussieht:

  

92831,499,000   , 0644321
  79217,999,000   , 5417178   , PK91622
  79217,999,000   , 5417178   , PK90755

Das kann schwieriger sein, also würde ich mich damit begnügen, dass die Ausgabe des letzten "Datensatzes" nur einmal mit dem zusätzlichen "PK ..." erscheint, um das vierte "Feld" dieser Zeile zu sein.
Am Ende ist der einfachste Weg, an den ich denken könnte, wenn die Zeile mit einem Komma (^,) beginnt, bevor die neue Zeile entfernt werden soll ... Ich bin mit awk nicht so vertraut, also wenn du mir einen geben könntest Beginne damit, es wäre wirklich geschätzt! Danke!

    
Mike 05.02.2010, 15:00
quelle

5 Antworten

2

Nun, ich denke, ich hätte mir die Verwendung von Records in awk näher ansehen sollen, als ich das letzte Nacht herausfinden wollte ... 10 Minuten nachdem ich sie angeschaut habe, habe ich es funktioniert. Für alle Interessierten hier ist, wie ich das gemacht habe: In meinem ursprünglichen sed-Skript lege ich einen zusätzlichen Zeilenvorschub vor den Anfang jedes Datensatzes, so dass es jetzt eine Leerzeile gibt, die jeden einzelnen trennt. Ich benutze dann den folgenden awk Befehl:

  

awk 'BEGIN {RS=""; FS="\ n"}
      {
          if (NF & gt; = 3)
              für (i = 3; i & lt; = NF; i ++)
                  print $ 1, $ 2, $ i
      } '

und es funktioniert wie ein Charme, der genau so ausgibt, wie ich es wollte!

    
Mike 05.02.2010, 15:14
quelle
5
%Vor%

Übersetzung: Lesen Sie in Großbuchstaben ohne Zeilentrennung, tauschen Sie jedes Komma nach einem Zeilenumbruch mit nur einem Komma aus.

Kürzester Code hier!

    
Demosthenex 05.02.2010 16:47
quelle
1
%Vor%     
Dennis Williamson 05.02.2010 16:10
quelle
1

Ohne Spezialgehäuse Feld 3, einfach.

%Vor%

Mit, komplexer, aber immer noch nicht zu schwer.

%Vor%     
ephemient 05.02.2010 16:37
quelle
1

Dies könnte für Sie funktionieren:

%Vor%

Erläuterung:

Dies kommt in zwei Teilen:

Fügen Sie die nächste Zeile hinzu und wenn die angehängte Zeile mit , beginnt, löschen Sie die eingebettete neue Zeile \n und beginnen Sie erneut. Wenn nicht gedruckt bis zum Zeilenumbruch und dann bis zur neuen Zeile löschen. Wiederholen.

Ersetze den 5. , durch eine neue Zeile. Fügen Sie dann die ersten vier Felder zwischen die eingebettete neue Zeile und das sechste Feld ein.

    
potong 02.12.2011 23:29
quelle

Tags und Links