我有一系列文件使用fixed with delimiting而不是逗号分隔的分隔符。他们都看起来像这样:
2015/09/29 659027 RIH619 25 105.80IN921186
2015/09/29 659027 RIH619 25 105.80IN921186
2015/09/29 659027 RIH619 25 105.80IN921186
2015/09/29 659027 RIH619 25 105.80IN921186
我想用逗号替换所有空格。我有一段代码可以实现这个目标:
sed -r 's/^\s+//;s/\s+/,/g'
运行代码后,我得到了这个结果:
2015/09/29,659027,RIH619,25,105.80IN921186
2015/09/29,659027,RIH619,25,105.80IN921186
2015/09/29,659027,RIH619,25,105.80IN921186
2015/09/29,659027,RIH619,25,105.80IN921186
我的问题是我得到的文件在金额和参考之间没有空格。我的输出需要看起来像这样:
2015/09/29,659027,RIH619,25,105.80,IN921186
2015/09/29,659027,RIH619,25,105.80,IN921186
2015/09/29,659027,RIH619,25,105.80,IN921186
2015/09/29,659027,RIH619,25,105.80,IN921186
我尝试的是:
sed -r 's/^\s+//;s/\.\d\d\D+/\.\d\d,\D/;s/\s+/,/g'
但它似乎没有做任何事情
答案 0 :(得分:1)
您可以将这个单一的sed用于:
sed -r 's/[[:blank:]]+/,/g; s/([[:digit:]])([[:alpha:]])/\1,\2/g' file
2015/09/29,659027,RIH619,25,105.80,IN921186
2015/09/29,659027,RIH619,25,105.80,IN921186
2015/09/29,659027,RIH619,25,105.80,IN921186
2015/09/29,659027,RIH619,25,105.80,IN921186
([[:digit:]])
匹配一个数字并在第1组([[:alpha:]])
匹配字母并在第2组\1,\2
在两个组之间添加逗号。答案 1 :(得分:1)
tr
和sed
tr ' ' ',' <file | sed -r 's/(\.[0-9]{2})/\1,/'
答案 2 :(得分:0)
awk
具有固定的字段宽度支持,适用于此类事情:
$ echo "2015/09/29 659027 RIH619 25 105.80IN921186" |
awk 'BEGIN { FIELDWIDTHS="10 1 6 1 6 1 2 1 6 8"; OFS="," }{ print $1,$3,$5,$7,$9,$10 }'
2015/09/29,659027,RIH619,25,105.80,IN921186