我有一个CSV文件,其中每列包含实际值后面的不必要的空格(或制表符)。我想创建一个新的CSV文件,使用bash删除所有空格。
例如
输入CSV文件中的一行
abc def pqr ;valueXYZ ;value PQR ;value4
输出csv文件中的同一行应为
abc def pqr;valueXYZ;value PQR;value4
我尝试使用awk修剪每一列,但它没有用。有人可以帮我这个吗?
提前致谢:)
我编辑了我的测试用例,因为这里的值可以包含空格。
答案 0 :(得分:2)
如果值本身总是没有空格,那么规范解决方案(在我看来)就是使用tr
:
$ tr -d '[:blank:]' < CSV_FILE > CSV_FILE_TRIMMED
答案 1 :(得分:2)
$ cat cvs_file | awk 'BEGIN{ FS=" *;"; OFS=";" } {$1=$1; print $0}'
FS
)设置为零或多个空格的正则表达式,后跟分号。OFS
)设置为一个简单的分号。$1=$1
来刷新$0
。$0
。$ cat cvs_file
abc def pqr ;valueXYZ ;value PQR ;value4
$ cat cvs_file | awk 'BEGIN{ FS=" *;"; OFS=";" } {$1=$1; print $0}'
abc def pqr;valueXYZ;value PQR;value4
答案 2 :(得分:1)
这将用一个空格替换多个空格:
sed -r 's/\s+/ /g'
答案 3 :(得分:0)
如果你知道你的列数据会以什么结束,那么这是一种可靠的方法:
sed 's|\(.*[a-zA-Z0-9]\) *|\1|g'
字符类将放置您放置数据的任何内容。
否则,如果您知道您的字段中不会有多个空格,那么您可以使用user1464130为您提供的空间。
如果这不能解决您的问题,请回复我。
答案 4 :(得分:0)
我找到了一种实现所需功能的方法,即以一种有效的方式删除空白行并删除文件的尾随换行符。我这样做是:
grep -v -e '^[[:space:]]*$' foo.txt