我想透過使用列序數位置和欄位長度將固定寬度檔案轉換為 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