在shell上用程序输出做算术更方便?

问题描述 投票:0回答:2

我通常需要运行程序进行一些文件检查,比如说使用 wc 来计算一个文件的行数,然后对其进行运算。通常我的做法是先得到输出结果,然后通过打开python终端或任何一个软件来进行运算。

如果我要做很多次,那么这样就有点烦了,我希望有一些方法可以直接获取输出,然后做我想要的运算。例如,我喜欢的一种方法是用perl的下面的方法,假设我必须取输出的 wc 并将其除以12。

perl -e 'print `wc -l file`/12'

这可能是有用的,但过了一会儿就会变得很烦人。因为这可能是人们经常需要做的事情,我想知道人们用什么更好更快的方法来快速完成这个任务。我见过 expr 可能会更好,但当我把绑定在 ``,就像上面一样。所以基本上最短,最有效的方法就是可以在linux终端中从文件输出中进行这种简单的运算。

linux shell math
2个回答
1
投票

双括号 ((...)) 算术,并带元号 $((...)) 你可以将结果作为一个字符串。

echo $((`wc -l < file` / 12))
echo $(($(wc -l < file) / 12))

你可以使用变量,它们不需要美元符号。这两种 var$var 是可以接受的。

lines=$(wc -l < file)
echo $((lines / 12))

if ((lines * 42 + 17 > 630)); then
    ...
fi

1
投票

基本上我已经在我的bash代码上做了测试: 多行代码:

a=$(echo "hi" | wc -l)
echo $a
b=`expr $a + 2`
echo $b

我把它改成了一行

echo `expr $(echo "hi" | wc -l) + 20`
  1. echo "hi" | wc -l 正在计算行数,并且是在 $() 使其成为一个变量,并对其值进行评估。
  2. 然后 expr 这里需要两个论证,并确保你在操作符前后使用空格,并使用backtic(`)来评估hi,最后做echo。
© www.soinside.com 2019 - 2024. All rights reserved.