Konvertieren Sie 7 Zeilen nach dem Abgleich mit awk oder sed in CSV-Zeilen

Konvertieren Sie 7 Zeilen nach dem Abgleich mit awk oder sed in CSV-Zeilen

Ich habe eine Textdatei, die so aussieht:

707.421
KFDTL902
C
107.31 NL
Chn PCO
FMN 
Chn Co
727.102
KFDTL901
C
107.32 NL
Chn PCO
FMN 
Chn Co

Es wiederholt sich in diesem Muster. Ich versuche, eine Übereinstimmung mit 707.xxx ([0-9]{3}.[0-9]{3}) zu finden, und nehme die nächsten 7 Zeilen nach der Übereinstimmung und mache daraus Zeilen einer CSV-Datei, wobei die erste Zelle die Regex-Übereinstimmung ist. Die Ausgabe wäre also:

707.421,KFDTL902,C,107.31 NL,Chn PCO,FMN,Chn Co
707.421,KFDTL902,C,107.31 NL,Chn PCO,FMN,Chn Co
707.421,KFDTL902,C,107.31 NL,Chn PCO,FMN,Chn Co

Ist dies mit awk oder sed möglich? Wie kann ich mit diesen Tools die nächsten 7 Zeilen nach einem Match verwenden?

Antwort1

Mit sed:

$ sed '/^[0-9]\{3\}\.[0-9]\{3\}$/{N;N;N;N;N;N;s/\n/,/g}' input.txt
707.421,KFDTL902,C,107.31 NL,Chn PCO,FMN ,Chn Co
727.102,KFDTL901,C,107.32 NL,Chn PCO,FMN ,Chn Co

Lesen Sie für jede Zeile, die dem Muster entspricht, die nächsten 6 Zeilen, hängen Sie sie an den Musterbereich an und ersetzen Sie anschließend alle Zeilenumbrüche durch Kommas.

verwandte Informationen