Ich möchte eine Datei mit fester Breite in UNIX in eine durch Pipes getrennte Datei konvertieren, indem ich die Ordnungszahl der Spalte und die Feldlänge verwende.
Die Eingabe sieht folgendermaßen aus:
00100000003779U20210203
00200000004238U20210203
Erforderliche Ausgabe:
001|0000000377|9U|20210203
002|0000000423|8U|20210203
Verfügbare Informationen sind
Column Ordinal Position - field length
1 - 3
2 - 10
3 - 2
4 - 8
Antwort1
Dies kann hilfreich sein:
cut -b1-3,4-13,14-15,16-23 --output-delim="|" file
Antwort2
Mit GNU awk
gawk -v OFS='|' -v FIELDWIDTHS="3 10 2 8" '{$1=$1; print}' file
001|0000000377|9U|20210203
002|0000000423|8U|20210203
Der $1=$1
Trick zwingt awk, den Datensatz unter Verwendung des Ausgabefeldtrennzeichens neu zu schreiben.
Wenn Sie etwas Portableres brauchen, ist Perl allgegenwärtig:
perl -lne 'print join "|", (/^(.{3})(.{10})(.{2})(.{8})/)' file