假设我想要执行以下命令:
(cat file | wc -l)/2
如果我想将其存储在一个变量(例如middle)中,该怎么做?这与简单的情况不同。
$middle=$(cat file | wc -l)/2
那我该怎么做呢?
middle=$((`wc -l < file` / 2))
middle=$((`wc -l file | awk '{print $1}'`/2))
wc
,只需要使用 awk
即可。 - ghostdog74 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))
wc -l < file
只获取行数。供参考。 - ghostdog74在赋值变量时,不需要使用$符号
以下是我想出来的:
mid=$(cat file | wc -l)
middle=$((mid/2))
echo $middle
使用 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"
$()
而不是反引号?另外,很好你纠正了无用的cat
,但是你又用了一个无用的重定向。wc
接受文件名作为参数。此外,wc
输出需要剥离文件名才能进行除法运算。 - Dennis Williamson