[英]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}'
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
这将用一个空格代替多个空格:
sed -r 's/\s+/ /g'
如果您知道列数据将以什么结尾,那么这是一种确保成功的方法:
sed 's|\\(.*[a-zA-Z0-9]\\) *|\\1|g'
字符类将是您放置数据末尾的位置。
否则,如果您知道字段中将不止一个空格,则可以使用user1464130给您的内容。
如果这不能解决您的问题,请与我联系。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.