我收到了一个CSV文件,它在一个列中使用空格来表示千位分隔符(例如11 000而不是11,000或11000)。其他列中包含有用的空格,因此我只需要修复这一列。
我的数据:
Date,Source,Amount
1/1/2013,Ben's Chili Bowl,11 000.90
我需要得到:
Date,Source,Amount
1/1/2013,Ben's Chili Bowl,11000.90
我一直在尝试awk,sed和cut,但是我无法让它工作。
答案 0 :(得分:6)
又脏又快:
awk -F, -v OFS="," '{gsub(/ /,"",$NF)}1'
示例:
kent$ echo "Date,Source,Amount
1/1/2013,Ben's Chili Bowl,11 000.90"|awk -F, -v OFS="," '{gsub(/ /,"",$NF)}1'
Date,Source,Amount
1/1/2013,Ben's Chili Bowl,11000.90
答案 1 :(得分:0)
一种可能性可能是:
sed 's/\([0-9]\) \([0-9]\)/\1\2/'
这会查找空白两侧的两个数字,并仅保留两个数字。对于显示的数据,它可以正常工作。如果您可能需要处理g
,则可以添加尾随11 234 567.89
。
如果您的其他列可能包含数字之间的空格,或者不是第一个此类列,则可以在相关字段awk
gsub()
中使用类似的技巧/正则结构。
答案 2 :(得分:0)
只用bash
$ echo "Date,Source,Amount
1/1/2013,Ben's Chili Bowl,11 000.90" |
while IFS=, read -r date source amount; do
echo "$date,$source,${amount// /}"
done
Date,Source,Amount
1/1/2013,Ben's Chili Bowl,11000.90