So konvertieren Sie eine Unix-Datei mit fester Breite in eine durch Pipes getrennte Datei unter Verwendung der Ordnungsposition der Spalte und der Feldlänge

So konvertieren Sie eine Unix-Datei mit fester Breite in eine durch Pipes getrennte Datei unter Verwendung der Ordnungsposition der Spalte und der Feldlänge

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=$1Trick 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

verwandte Informationen