我有一个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/