我需要在Unix中将固定宽度的文件转换为“逗号分隔”

vmdwslir  于 2023-04-29  发布在  Unix
关注(0)|答案(3)|浏览(103)

我需要在Unix中将一个固定宽度的文件转换为逗号分隔的文件。

k12582927001611USNA
k12582990001497INAS
k12583053001161LNEU

所需输出:

k,1258292700,1611,US,NA
k,1258299000,1497,IN,AS
k,1258305300,1161,LN,EU
c8ib6hqw

c8ib6hqw1#

就像这样:

awk -v FIELDWIDTHS="1 10 4 2 2" -v OFS=, '{print $1,$2,$3,$4,$5}' file

OFS是输出字段分隔符,我将其设置为逗号。FIELDWIDTHS变量为您完成了所有的魔术。
或者你可以在Perl中这样做:

perl -ne 'm/(.)(.{10})(....)(..)(..)/; printf "%s,%s,%s,%s,%s\n",$1,$2,$3,$4,$5' file

或者,在sed中,像这样:

sed -E 's/(.)(.{10})(....)(..)(..)/\1,\2,\3,\4,\5/' file
kninwzqo

kninwzqo2#

使用awksubstr()

awk -v OFS=, '{ print substr($0, 1, 1), substr($0, 2, 10), substr($0, 12, 4), substr($0, 16, 2), substr($0, 18, 2) }' file

输出:

k,1258292700,1611,US,NA
k,1258299000,1497,IN,AS
k,1258305300,1161,LN,EU
pepwfjgg

pepwfjgg3#

您可以通过管道将文件通过:

awk '{print substr($0,1,1)","substr($0,2,10)","substr($0,12,4)","substr($0,16,2)","substr($0,18,2)}'

按照以下测试运行:

pax> echo 'k12582927001611USNA
k12582990001497INAS
k12583053001161LNEU' | awk '
{
    print substr($0,1,1)","substr($0,2,10)","substr($0,12,4)","
        substr($0,16,2)","substr($0,18,2)
}'

k,1258292700,1611,US,NA
k,1258299000,1497,IN,AS
k,1258305300,1161,LN,EU

相关问题