我有一个天真的bash问题。
export A=`wc file.txt`
export B=`echo $A[1] - 1 | bc`
问题是我无法评估$ A中的第一个元素。 我可以用awk
来做echo $A | awk '{print $1}'
但是如果我将它插入上一个等式中它就不起作用。
也许有人有想法?
答案 0 :(得分:4)
您要将变量$A
设置为wc
的输出。由于您显示$A[1]
,看起来您想要第二个值,即单词数,但是您在awk中使用$1
,因此我认为您需要多行,{{1} } -l
中的参数。
所以从现在开始,我想你想要使用线条。如果没有,只需使用wc
而不是-l
更改解决方案。
问题是-w
输出了许多参数。如果您指定wc file
或-w
,则会将其值与文件名一起获取。但是如果你像-l
那样做间接,你只需要获得行数,这样你就不必清理输出。
这样,你可以这样做:
wc -l < file.txt
总之,您可能希望直接使用它,而无需存储中间值:
a=$(wc -l < file.txt)
b=$(echo "$a" -1 | bc)
或者,如果您想使用b=$(echo "$(wc -l <file.txt)" -1 | bc)
,您可以说:
awk
甚至可以使用awk -v lines="$(wc -l < file.txt)" 'BEGIN {print lines-1}'
执行计算,如suggested by JID:
$(( ))
或
b=$(($(wc -l <file.txt) - 1 ))
答案 1 :(得分:0)
说,这个可能很好:
export A=$(wc < file.txt)
export B=$(echo "$(echo $A | cut -d' ' -f1) - 1" | bc)
甚至
export B=$(echo "$(wc < file.txt | cut -d' ' -f1) - 1" | bc)
如果你不打算使用&#39; wc&#39;结果进一步。
&#39; wc&#39;命令打印换行符,字和字节计数器(参见手册页), 它们是空间分隔的,所以这里的切割就足够了。
如果你需要&#39; wc&#39;作为一个数组,你需要拆分它并写入一个预先声明的A&#39;手动排列。