【问题标题】:CSV Column Counts via Command Line Alias通过命令行别名的 CSV 列计数
【发布时间】:2013-05-05 18:04:41
【问题描述】:

我有一个 Bash 脚本问题,它对我来说不再重要,但仍然让我发疯,因为我想不通。

我试图通过命令行比较 CSV 文件的列数,发现一些指令 here 看起来很有希望。原始命令运行良好,但每次创建别名的尝试都失败了。

原始命令行 - 工作!

head -n 1 文件名.CSV | awk '{split($0, 件, ","); for (i=1; i

例如。 molsen@molsen-M14xR2:~/projects/ee-export$ head -n 1 ee-content.csv | awk '{split($0, 件, ","); for (i=1; i

7

别名命令行 - 失败!

别名 csvcc="head -n 1 $1 | awk '{split($0, pieces, ","); for (i=1; i

例如。 molsen@molsen-M14xR2:~/projects/ee-export$ csvcc ee-content.csv

awk:命令。行:1:{拆分(bash,碎片,,); for (i=1; i

awk:命令。 line:1: ^ 语法错误

awk:命令。行:1:{拆分(bash,碎片,,); for (i=1; i

awk:命令。 line:1: ^ 语法错误

awk:命令。行:1:{拆分(bash,碎片,,); for (i=1; i

awk:命令。 line:1: ^ 0 作为 split 的参数数量无效 1023 ee-content.csv

我已经尝试了这个命令的各种变体,使用不同的引用和转义,但它们都会产生错误。我什至查看了strong vs. weak quoting,但没有发现任何有用的东西。另外,我想出了这个更简单的命令,但它以同样的方式失败:

使用 SED 的命令行 - 有效!

head -n 1 文件.csv | sed 's/\,/\n/g' | wc -l

molsen@molsen-M14xR2:~/projects/ee-export$ head -n 1 ee-content.csv | sed 's/\,/\n/g' | wc -l

7

使用 SED 的别名 - 失败(计数行,而不是列)

别名 csvcc="head -n 1 $1 | sed 's/\,/\n/g' | wc -l"

molsen@molsen-M14xR2:~/projects/ee-export$ csvcc ee-content.csv

1023 ee-content.csv

谁能告诉我我在这里缺少什么?感谢您的帮助!

【问题讨论】:

    标签: bash ubuntu csv scripting command-line-interface


    【解决方案1】:

    rzymek 的解决方案 1 不起作用,因为 csvcc <ee-content.csv 扩展为

    head -n 1 | sed 's/\,/\n/g' | wc -l <ee-content.csv
    

    我。 e. 输入文件不是送到head,而是送到wc -l;这解释了为什么它给出了行数。

    另一个使用别名和awk的解决方案:

     alias csvcc="awk -F, 'NR==1 { print NF }'"
    

    【讨论】:

      【解决方案2】:

      别名不使用$1,脚本可以。

      解决方案 1。

      alias csvcc="head -n 1  | sed 's/\,/\n/g' | wc -l"
                             ^--- no $1, input will be read from stdin
      

      用法:

      csvcs < ee-content.csv
      

      解决方案 2。

      将该行放入$HOME/bin/csvcc的bash脚本文件中:

      #!/bin/bash
      head -n 1  | sed 's/\,/\n/g' | wc -l
      

      然后使脚本可执行:

      chmod +x ~/bin/csvcc
      

      在 ubuntu 上,$HOME/bin 默认添加到 $PATH。如果它不在您的系统上,请将此行添加到您的~/.profile

      export PATH="$HOME/bin:$PATH"
      

      用法:

      csvcs ee-content.csv
      

      【讨论】:

      • 谢谢,但别名仍然给出行数,而不是列数。知道为什么吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-09-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-28
      • 1970-01-01
      相关资源
      最近更新 更多