需要将固定宽度文件转换为在unix中分隔的"逗号"

cod*_*aby 3 unix

需要将固定宽度文件转换为在unix中分隔的"逗号".

k12582927001611USNA
k12582990001497INAS
k12583053001161LNEU
Run Code Online (Sandbox Code Playgroud)

所需输出:

k,1258292700,1611,US,NA
k,1258299000,1497,IN,AS
k,1258305300,1161,LN,EU
Run Code Online (Sandbox Code Playgroud)

Mar*_*ell 15

像这样:

awk -v FIELDWIDTHS="1 10 4 2 2" -v OFS=, '{print $1,$2,$3,$4,$5}' file
Run Code Online (Sandbox Code Playgroud)

OFS是输出字段分隔符,我将其设置为逗号.该FIELDWIDTHS变量做所有的魔法为您服务.

或者你可以这样做Perl:

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

或者,sed像这样:

sed -E 's/(.)(.{10})(....)(..)(..)/\1,\2,\3,\4,\5/' file
Run Code Online (Sandbox Code Playgroud)


kon*_*box 5

使用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
Run Code Online (Sandbox Code Playgroud)

输出:

k,1258292700,1611,US,NA
k,1258299000,1497,IN,AS
k,1258305300,1161,LN,EU
Run Code Online (Sandbox Code Playgroud)

  • 该代码片段运行完美。感谢您的及时帮助。 (2认同)
  • @DavidBetz,这是发布的每个问题中非常常见的事情,并且应该已经暗示了。如果您担心的话,请告诉 OP。没有必要一次又一次提醒人们明显的事情。另外,我想你应该已经注意到了,但是发布的样本数据几乎没有任何意义。 (2认同)