
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
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,/'