繁体   English   中英

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

[英]Removing spaces from columns of a CSV file in bash

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

例如

输入CSV文件中的一行

abc def pqr             ;valueXYZ              ;value PQR              ;value4

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

abc def pqr;valueXYZ;value PQR;value4

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

提前致谢 :)

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

如果值本身始终没有空格,那么规范的解决方案(在我看来)将使用tr

$ tr -d '[:blank:]' < CSV_FILE > CSV_FILE_TRIMMED
$ cat cvs_file | awk 'BEGIN{ FS=" *;"; OFS=";" } {$1=$1; print $0}'
  1. 将输入字段分隔符( FS )设置为零个或多个空格的正则表达式,后跟一个分号。
  2. 将输出字段分隔符( OFS )设置为简单的分号。
  3. $1=$1是刷新$0所必需的。
  4. 打印$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

这将用一个空格代替多个空格:

sed -r 's/\s+/ /g'

如果您知道列数据将以什么结尾,那么这是一种确保成功的方法:

sed 's|\\(.*[a-zA-Z0-9]\\) *|\\1|g'

字符类将是您放置数据末尾的位置。

否则,如果您知道字段中将不止一个空格,则可以使用user1464130给您的内容。

如果这不能解决您的问题,请与我联系。

我找到了一种实现所需功能的方法,即以一种有效的方式删除空白行并删除文件的尾随换行符。 我这样做:

grep -v -e '^[[:space:]]*$' foo.txt

使用grep删除空白行

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM