So setzen Sie ein Komma zwischen zwei Spalten in einer Textdatei

So setzen Sie ein Komma zwischen zwei Spalten in einer Textdatei

Dies ist meine Textdatei:

0019121002313002316003135  
0057936000814000814003023  
0081638001519001523001176  
0090531001841001842002633  
0111210001515001518000912  
0115400001807001828001593

Ich möchte die verarbeitete Ausgabe wie folgt:

0019121,002313,002316,003135
0057936,000814,000814,003023
0081638,001519,001523,001176
0090531,001841,001842,002633
0111210,001515,001518,000912
0115400,001807,001828,001593

Wie mache ich das?

Antwort1

$ sed -E 's/(.{7})(.{6})(.{6})(.{6})/\1,\2,\3,\4/' file
0019121,002313,002316,003135
0057936,000814,000814,003023
0081638,001519,001523,001176
0090531,001841,001842,002633
0111210,001515,001518,000912
0115400,001807,001828,001593

Das heißt, die Bits jeder Zeile, aus denen die neuen Felder bestehen, werden abgeglichen und Kommas dazwischen eingefügt. Die Zuordnung eines Felds erfolgt unter Verwendung .{7}oder .{6}in Abhängigkeit von der gewünschten Feldlänge.

Antwort2

Mit GNU awk( gawk) können Sie explizite Feldbreiten festlegen:

$ gawk '{$1=$1} 1' FIELDWIDTHS='7 6 6 6' OFS=, file
0019121,002313,002316,003135
0057936,000814,000814,003023
0081638,001519,001523,001176
0090531,001841,001842,002633
0111210,001515,001518,000912
0115400,001807,001828,001593

SehenVerarbeiten von Daten mit fester Breite

Antwort3

Vorausgesetzt, es ist kein Fehler, dass das erste Komma nach 7 Zeichen steht und die nächsten nach einem Vielfachen von 6, schlage ich vor

sed 's/\(.......\)\(......\)\(......\)/\1,\2,\3,/'

verwandte Informationen