说我是否想要执行此命令:
(cat file | wc -l)/2
并将其存储在中间变量中,我该怎么做?
我知道它根本不是
的情况$middle=$(cat file | wc -l)/2
那我该怎么办呢?
答案 0 :(得分:11)
middle=$((`wc -l < file` / 2))
答案 1 :(得分:1)
middle=$((`wc -l file | awk '{print $1}'`/2))
答案 2 :(得分:1)
这依赖于Bash能够使用标量语法引用数组的第一个元素,并且默认情况下会在空格上进行单词分割。
middle=($(wc -l file)) # create an array which looks like: middle='([0]="57" [1]="file")'
middle=$((middle / 2)) # do the math on ${middle[0]}
第二行也可以是:
((middle /= 2))
答案 3 :(得分:0)
分配变量时,不要使用$
以下是我提出的建议:
mid=$(cat file | wc -l)
middle=$((mid/2))
echo $middle
双括号在第二行很重要。我不知道为什么,但我想它告诉Bash它不是文件?
答案 4 :(得分:0)
使用awk。
middle=$(awk 'END{print NR/2}' file)
你也可以只使用shell制作自己的“wc”。
linec(){
i=0
while read -r line
do
((i++))
done < "$1"
echo $i
}
middle=$(linec "file")
echo "$middle"