我有一个Bash脚本问题,这个问题对我来说不再重要,但由于我无法解决,因此仍然使我发疯。

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

原始命令行-工作!

头-n 1 FILENAME.CSV | awk'{split($ 0,Pieces,“,”);为(i = 1; i
例如molsen @ molsen-M14xR2:〜/ projects / ee-export $ head -n 1 ee-content.csv | awk'{split($ 0,Pieces,“,”);为(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:cmd。行:1:{split(bash,pieces 、,); for(i = 1; i
awk:cmd。行:1:^语法错误

awk:cmd。行:1:{split(bash,pieces 、,); for(i = 1; i
awk:cmd。行:1:^语法错误

awk:cmd。行:1:{split(bash,pieces 、,); for(i = 1; i
awk:cmd。行:1:^ 0无效,因为要分割的参数数量
1023 ee-content.csv

我已经尝试过使用不同的引号和转义符对此命令进行各种变体,但是它们都会产生错误。我什至调查了strong vs. weak quoting,但没有发现任何有用的信息。另外,我想出了这个简单的命令,但是它以相同的方式失败:

使用SED的命令行-工作!

头-n 1 file.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

谁能告诉我我在这里想念的东西吗?谢谢你的帮助!

最佳答案

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 }'"

关于bash - 通过命令行别名的CSV列计数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16492681/

10-13 09:18