我想将固定长度文件转换为分隔文件。
但是当我使用时:
sed -e 's/./&,/38' -e 's/./&,/103' -e 's/./&,/142' -e 's/./&,/588' test6.txt
我收到错误:
后缀太大 - 最多512:
并且gawk
无法在我的计算机上运行。
输入文件是
我的输入是
100211 XFMASKSWNDAKNOT SET DASAAMS 00KP02/03/2013
输出应该是
100211,XFMASKSWNDAK,NOT SET,DASAAMS,00KP,02/03/2013
请帮帮我
答案 0 :(得分:1)
似乎没有空格或制表符分隔字段,例如XFMASKSWNDAKNOT
NOT
位于单独的字段中。
然后你应该使用vim
中的字符数,例如
:s/^\(.\{23}\)\(.\{10}\)/\1,\2,/
将在第23个角色后面放置一个昏迷,
,在另外10个角色后再放置一个昏迷100211 XFMASKSWNDAKNOT SET DASAAMS 00KP02/03/2013
。输入
100211 ,XFMASKSWNDAK,NOT SET DASAAMS 00KP02/03/2013
产量
sed
我没有在您的完整示例中执行此操作,因为您提供的:s/[ ]*,/,/g
命令中的数字似乎与文件和所需的输出不匹配。
然后你可以在昏迷前删除任何空格:
cut
根据@Roland Jansen的建议,使用sed
然后{{1}}删除空格之前,昏迷是一种很好的shell方法。
答案 1 :(得分:0)
像这样使用tr
:
echo 100211 XFMASKSWNDAKNOT SET DASAAMS | tr -s " " | tr " " ","
首先tr
将多个空格压缩到一个空格,第二个空格将空格转换为逗号。
或使用文件:
tr -s " " < yourfile | tr " " "," > newfile
答案 2 :(得分:0)
您可以使用:
sed -e 's/\s\+/,/g' test6.txt
唯一不满足的似乎是输入00KP02/03/2013
的最后一部分,虽然我觉得它可能是一个拼写错误,00KP
和{{之间必须有空格1}}在这种情况下,上面给出的解决方案可以正常工作。
答案 3 :(得分:0)
vim中的这个cmd适用于您的示例输入:
%s/ \+/,/g
如果您想要连续的spaces
和tab
被替换,则只处理space
:
%s/\s\{2,}/,/g