使用bash从单个列中删除空格
问题描述:
我提供了一个CSV文件,它在单个列中使用空格来表示千位分隔符(例如,11000而不是11,000或11000)。其他列中有有用的空格,所以我只需要修复这一列。使用bash从单个列中删除空格
我的数据:
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和切,但我不能得到它的工作。
答
脏快捷:
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
答
一种可能性是:
sed 's/\([0-9]\) \([0-9]\)/\1\2/'
这看起来两个数字的空白的两侧,只保留了两位数字。对于显示的数据,它会正常工作。如果您可能需要处理11 234 567.89
,则可以添加尾随g
。
如果您可能有其他数列之间的空格,或不是第一个这样的列,您可以在相关字段中使用awk
中的gsub()
类似的技术/正则表达式。
答
只是在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
只是为进一步的信息,'$ NF'可以用'$ N'取代作出改变的任何'nth'列具体 – abasu 2013-05-10 17:14:12
真棒,工作完美,谢谢你肯特!我会四处搜寻,看看它是如何工作的,但如果你不介意给我解释,我会很感激。 – user2057932 2013-05-10 17:22:11
选项告诉'awk'使用逗号作为输入('-F,')和输出('-v OFS =,')的字段分隔符。 'gsub(/ /,“”,somestring)'在给定的字符串中完全替换空格(这是'/'...'/'之间的空格)('“”')。 NF是(逗号分隔的,感谢'-F,')字段的数量,'$'n是第n个字段,所以'$ NF'意味着该行的最后一个字段。最后的'1'告诉awk在之后执行它的默认值,这是将修改的字段打印出来,并由OFS分隔。所以:删除每行的最后逗号分隔字段中的所有空格。 – 2013-05-10 17:26:10