1

我收到了一个 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,但无法使其正常工作。

4

3 回答 3

7

又脏又快:

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
于 2013-05-10T17:06:17.577 回答
0

just with 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
于 2013-05-10T21:03:14.613 回答
0

一种可能是:

sed 's/\([0-9]\) \([0-9]\)/\1\2/'

这会在空白的两侧查找两位数并仅保留两位数。对于显示的数据,它可以正常工作。如果您可能g必须处理11 234 567.89.

如果您可能有其他列在数字之间有空格,或者不是第一个这样的列,您可以在相关字段 中awk使用类似的技术/正则表达式。gsub()

于 2013-05-10T17:07:22.860 回答