我有一个Bash脚本问题,对我来说不再重要,但仍然让我发疯,因为我无法理解。
我试图通过命令行比较CSV文件的列数,并发现一些看起来很有希望的说明here。原始命令工作正常,但每次创建别名的尝试都失败了。
原始命令行 - WORKS!
head -n 1 FILENAME.CSV | awk'{split($ 0,pieces,“,”); for(i = 1; i&lt; = length(pieces); i ++)print pieces [i];}'| wc -l </ strong>
实施例。 molsen @molsen-M14xR2:〜/ projects / ee-export $ head -n 1 ee-content.csv | awk'{split($ 0,pieces,“,”); for(i = 1; i&lt; = length(pieces); i ++)print pieces [i];}'| wc -l </ p>
7
别名命令行 - 失败!
alias csvcc =“head -n 1 $ 1 | awk'{split($ 0,pieces,”,“); for(i = 1; i&lt; = length(pieces); i ++)print pieces [i ];}'| wc -l“
实施例。 molsen @ molsen-M14xR2:〜/ projects / ee-export $ csvcc ee-content.csv
awk:cmd。 line:1:{split(bash,pieces ,,); for(i = 1; i&lt; = length(pieces); i ++)print pieces [i];}
awk:cmd。 line:1:^语法错误
awk:cmd。 line:1:{split(bash,pieces ,,); for(i = 1; i&lt; = length(pieces); i ++)print pieces [i];}
awk:cmd。 line:1:^语法错误
awk:cmd。 line:1:{split(bash,pieces ,,); for(i = 1; i&lt; = length(pieces); i ++)print pieces [i];}
awk:cmd。 line:1:^ 0作为split的参数个数无效 1023 ee-content.csv
我已尝试使用不同的引用和转义来对此命令进行各种变化,但它们都会产生错误。我甚至调查了strong vs. weak quoting,但没有找到任何有用的东西。此外,我提出了这个更简单的命令,但它以同样的方式失败:
使用SED的命令行 - 工作!
head -n 1 file.csv | sed's / \,/ \ n / g'| wc -l </ strong>
molsen @ molsen-M14xR2:〜/ projects / ee-export $ head -n 1 ee-content.csv | sed's / \,/ \ n / g'| wc -l </ p>
7
ALIAS使用SED - 失败(计算线,而不是列)
alias 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
任何人都可以告诉我这里缺少什么吗?谢谢你的帮助!
答案 0 :(得分:1)
rzymek的解决方案1不起作用,因为csvcc <ee-content.csv
扩展到
head -n 1 | sed 's/\,/\n/g' | wc -l <ee-content.csv
我。例如,输入文件不会输入head
,而是输入wc -l
;这就解释了为什么它给出了行数。
另一个带别名和awk的解决方案:
alias csvcc="awk -F, 'NR==1 { print NF }'"
答案 1 :(得分:0)
别名不使用$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
:
#!/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