如何将固定宽度的 Unix 文件转换为使用列序号位置和字段长度分隔的管道

如何将固定宽度的 Unix 文件转换为使用列序号位置和字段长度分隔的管道

我想通过使用列序数位置和字段长度将固定宽度文件转换为 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

相关内容