【发布时间】:2017-04-25 10:24:52
【问题描述】:
我正在尝试实现一个从管道命令读取输入的 bash 脚本。我想处理输入上的每一行并在每一行上执行一些处理。此外,我想重用传递给脚本的输入。但是,我注意到我无法重用输入。以下是我的脚本:
#!/bin/bash
while read line
do
percentage=$(echo $line | awk 'printf $1')
# perform some processing using the total i.e. percentage/total*100
done
这个脚本是这样执行的:
cat data.txt | grep "status" | ./myscript.sh
样本数据是:
1 STATUS
2 AUTHORISED
11 SENT
如果脚本被修改成这样:
#!/bin/bash
input=$1
total=$(cut -f1 $1)
echo $total
while read $input
do
percentage=$(echo $line | awk 'printf $1')
# perform some processing using the total i.e. percentage/total*100
done
这个脚本只输出总数,不执行while循环。
此任务需要多个管道命令,因为此脚本将被许多事物使用,以保持其通用性和可重用性。如果不将内容存储到文件中,如何实现这一点?
示例输入:
1 STATUS
2 AUTHORISED
11 SENT
总计为 14。所以每个项目即 1/14*100、2/14*100 和 11/14*100。
【问题讨论】:
-
您使用了
cut -f1 $1,但您没有通过命令行传递任何内容。因此,该命令变为cut -f1,因此将stdin作为文件名。由于所有stdin都用尽了,while read第一个read失败,因此循环永远不会执行。 -
另外,你用
while read $input做了什么? -
什么意思?
-
我正在尝试通过打印每一行并执行一些计算(例如百分比等)来处理每一行。命令 grep "status" 就是一个示例。它可能是 grep S ,它将返回所有 3 个项目。
-
我不明白你的例子。如果您的输入与您显示的一样,那么
grep status将不会产生任何输出。grep -i status会产生一行输出...但在这种情况下,您要求和,总数是多少?
标签: linux bash ubuntu grep pipe