在unix中将定长文件转换为分隔文件

在unix中将定长文件转换为分隔文件,unix,sed,sh,vim,Unix,Sed,Sh,Vim,我想将定长文件转换为分隔文件 但当我使用: sed -e 's/./&,/38' -e 's/./&,/103' -e 's/./&,/142' -e 's/./&,/588' test6.txt 我得到一个错误: 后缀太大-最大512个: 而gawk在我的机器中不工作 输入文件是 我的意见是 100211 XFMASKSWNDAKNOT SET DASAAMS

我想将定长文件转换为分隔文件

但当我使用:

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

请帮我这样使用
tr

echo 100211                 XFMASKSWNDAKNOT SET        DASAAMS   | tr -s " " | tr " " ","
第一个
tr
将多个空格压缩为单个空格,第二个将空格转换为逗号

或使用文件:

tr -s " " < yourfile | tr " " "," > newfile
新建文件 您可以使用以下功能:

sed -e 's/\s\+/,/g' test6.txt

唯一不满足的似乎是您输入的最后一部分
00KP02/03/2013
,尽管我觉得这可能是一个输入错误,并且
00KP
02/03/2013
之间必须有空格,在这种情况下,上述给定的解决方案将很好地工作。

vim中的此cmd适用于您的示例输入:

%s/  \+/,/g
如果要替换连续的
选项卡
空格
,则此操作仅处理
空格

%s/\s\{2,}/,/g

似乎不一定有空格或制表符分隔字段,如
XFMASKSWNDAKNOT
中的
not
位于单独的字段中

然后您应该使用
vim
中的字符计数,例如

:s/^\(.\{23}\)\(.\{10}\)/\1,\2,/
将在第23个字符后放置一个coma
,然后再放置10个字符。输入

100211                 XFMASKSWNDAKNOT SET        DASAAMS                                 00KP02/03/2013   
屈服

100211                 ,XFMASKSWNDAK,NOT SET        DASAAMS                                 00KP02/03/2013 
我没有在您的完整示例中这样做,因为您提供的
sed
命令中的数字似乎与文件和所需的输出不匹配

然后,可以在昏迷前删除任何空格:

:s/[ ]*,/,/g

正如@Roland Jansen所建议的,在昏迷前使用
cut
然后使用
sed
删除空格也是一种很好的方法。

您的输入看起来像什么,预期的输出是什么?例如,你想做什么?你是什么意思
gawk没有在我的机器上工作
。您是从
gawk
中收到错误,还是仅仅收到类似
gawk:notfound
的消息。请使用此信息编辑您的问题。如果未找到
。请尝试
awk
nawk
。祝您好运。@user3497060,您的
sed
版本是什么。(
sed--version
)只要用逗号替换所有连续的空格即可。还是我遗漏了什么?这似乎是这样的
sed's/[]\+/,/g'
然后删除
NOT之间的多余逗号,设置
Use cut:
cut--output delimiter=,-b1-6,24-35,36-42,51-57,91-94,95-104