我需要在Unix中将一个固定宽度的文件转换为逗号分隔的文件。
k12582927001611USNA k12582990001497INAS k12583053001161LNEU
所需输出:
k,1258292700,1611,US,NA k,1258299000,1497,IN,AS k,1258305300,1161,LN,EU
c8ib6hqw1#
就像这样:
awk -v FIELDWIDTHS="1 10 4 2 2" -v OFS=, '{print $1,$2,$3,$4,$5}' file
OFS是输出字段分隔符,我将其设置为逗号。FIELDWIDTHS变量为您完成了所有的魔术。或者你可以在Perl中这样做:
OFS
FIELDWIDTHS
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
kninwzqo2#
使用awk和substr():
awk
substr()
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
输出:
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
3条答案
按热度按时间c8ib6hqw1#
就像这样:
OFS
是输出字段分隔符,我将其设置为逗号。FIELDWIDTHS
变量为您完成了所有的魔术。或者你可以在Perl中这样做:
或者,在sed中,像这样:
kninwzqo2#
使用
awk
和substr()
:输出:
pepwfjgg3#
您可以通过管道将文件通过:
按照以下测试运行: