使用bash从单个列中删除空格

时间:2013-05-10 17:04:08

标签: bash csv sed awk

我收到了一个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,但是我无法让它工作。

3 个答案:

答案 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