列の順序位置とフィールド長を使用して、UNIX で固定幅ファイルをパイプ区切りファイルに変換します。
入力は次のようになります。
00100000003779U20210203
00200000004238U20210203
必要な出力:
001|0000000377|9U|20210203
002|0000000423|8U|20210203
入手可能な情報は
Column Ordinal Position - field length
1 - 3
2 - 10
3 - 2
4 - 8
答え1
これは次のことに役立ちます:
cut -b1-3,4-13,14-15,16-23 --output-delim="|" file
答え2
GNU awk を使う
gawk -v OFS='|' -v FIELDWIDTHS="3 10 2 8" '{$1=$1; print}' file
001|0000000377|9U|20210203
002|0000000423|8U|20210203
この$1=$1
トリックにより、awk は出力フィールドセパレーターを使用してレコードを書き換えるようになります。
より移植性の高いものが必要な場合は、perl が広く利用されています。
perl -lne 'print join "|", (/^(.{3})(.{10})(.{2})(.{8})/)' file