【问题标题】:Removing spaces from columns of a CSV file in bash从 bash 中的 CSV 文件的列中删除空格
【发布时间】:2012-06-29 00:45:32
【问题描述】:

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

例如

输入 CSV 文件中的一行

abc def pqr             ;valueXYZ              ;value PQR              ;value4

输出 csv 文件中的同一行应该是

abc def pqr;valueXYZ;value PQR;value4

我尝试使用 awk 修剪每一列,但没有奏效。谁能帮我解决这个问题?

提前致谢:)

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

【问题讨论】:

  • 对不起,问题加起来了,这里的值也可以包含空格(例如 value1 可以是“blah blah blah”)。但我想保留这些空格,我只想删除两个值之间的空格。
  • 那你需要提供更准确的测试输入。

标签: bash


【解决方案1】:
$ 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

【讨论】:

  • 非常感谢@vergenzt !这处理了所有情况:)
【解决方案2】:

如果值本身总是没有空格,规范的解决方案(在我看来)是使用@987654321@

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

      如果您知道您的列数据将以什么结尾,那么这是一种万无一失的方法:

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

      字符类将是您放置数据结尾的地方。

      否则,如果您知道您的字段中不会出现多个空格,那么您可以使用 user1464130 给您的内容。

      如果这不能解决您的问题,请回复我。

      【讨论】:

        【解决方案5】:

        我找到了一种方法来执行我想要的操作,即删除空白行并以有效的方式删除文件的尾随换行符。我这样做:

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

        来自Remove blank lines with grep

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-03-12
          • 2013-01-04
          • 1970-01-01
          • 2021-01-26
          • 2013-01-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多