在bash中从CSV文件的列中删除空格

时间:2012-06-27 14:37:22

标签: bash

我有一个CSV文件,其中每列包含实际值后面的不必要的空格(或制表符)。我想创建一个新的CSV文件,使用bash删除所有空格。

例如

输入CSV文件中的一行

abc def pqr             ;valueXYZ              ;value PQR              ;value4

输出csv文件中的同一行应为

abc def pqr;valueXYZ;value PQR;value4

我尝试使用awk修剪每一列,但它没有用。有人可以帮我这个吗?

提前致谢:)

我编辑了我的测试用例,因为这里的值可以包含空格。

5 个答案:

答案 0 :(得分:2)

如果值本身总是没有空格,那么规范解决方案(在我看来)就是使用tr

$ tr -d '[:blank:]' < CSV_FILE > CSV_FILE_TRIMMED

答案 1 :(得分:2)

$ cat cvs_file | awk 'BEGIN{ FS=" *;"; OFS=";" } {$1=$1; print $0}'
  1. 将输入字段分隔符(FS)设置为零或多个空格的正则表达式,后跟分号。
  2. 将输出字段分隔符(OFS)设置为一个简单的分号。
  3. 需要
  4. $1=$1来刷新$0
  5. 打印$0

  6. $ 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

来自Remove blank lines with grep