在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