如何将命令的输出除以2,并将结果存储到bash变量中?

时间:2010-02-22 21:33:17

标签: bash unix shell

说我是否想要执行此命令:

(cat file | wc -l)/2

并将其存储在中间变量中,我该怎么做?

我知道它根本不是

的情况
$middle=$(cat file | wc -l)/2

那我该怎么办呢?

5 个答案:

答案 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"