在bash/unix中删除CSV文件的所有列的空格

ste*_*cob 1 unix bash shell awk sed

我有一个CSV文件,其中每列包含在实际值之前添加的不必要的额外空格.我想删除所有空格来创建一个新的CSV文件.

例如

输入CSV文件中的一行

 123, ste hen, 456, out put
Run Code Online (Sandbox Code Playgroud)

预期的输出CSV文件

123,ste hen,456,out put
Run Code Online (Sandbox Code Playgroud)

我尝试使用awk修剪每一列,但它没有用.

anu*_*ava 8

这个sed应该工作:

sed -i.bak -E 's/(^|,)[[:blank:]]+/\1/g; s/[[:blank:]]+(,|$)/\1/g' file.csv
Run Code Online (Sandbox Code Playgroud)

这将删除主要的spa,尾随空格和逗号周围的空格.

更新:这是一个awk命令来做同样的事情:

awk -F '[[:blank:]]*,[[:blank:]]*' -v OFS=, '{
  gsub(/^[[:blank:]]+|[[:blank:]]+$/, ""); $1=$1} 1' file
Run Code Online (Sandbox Code Playgroud)


sjs*_*sam 5

awk 是你的朋友。

输入

$ cat 38609590.txt
Ted Winter, Evelyn Salt, Peabody
  Ulrich, Ethan Hunt, Wallace
James Bond, Q,  M
(blank line)
Run Code Online (Sandbox Code Playgroud)

脚本

$ awk '/^$/{next}{sub(/^[[:blank:]]*/,"");gsub(/[[:blank:]]*,[[:blank:]]*/,",")}1' 38609590.txt
Run Code Online (Sandbox Code Playgroud)

输出

Ted Winter,Evelyn Salt,Peabody
Ulrich,Ethan Hunt,Wallace
James Bond,Q,M
Run Code Online (Sandbox Code Playgroud)

笔记

  • 这个也删除了空行 - /^$/{next}
  • 有关更多信息,请参阅[ awk ]手册。