我正在尝试在bash中创建一个shell脚本,它将日志文件作为参数,然后要求在文件中搜索事件。日志文件如下所示:
CallTilEdb 8
CallCustomer 9
CallTilEdb 4
CustomerChk 10
CustomerChk 15
CallTilEdb 16
首先是事件的名称,然后是时间,由选项卡分隔。 bash脚本的要点是搜索指定的事件并添加在该事件上花费的总时间。到目前为止我的脚本看起来像这样:
#!/bin/bash
declare -i sumTime=0
echo "Which event do you want to search for?"
read event
while read -r line
do
echo $line; cut -f1
if [ $(echo $line; cut -f1) == $event ];then
echo $line; cut -f2
fi
done < $1
echo "The sum is $sumTime"
我现在没有添加任何东西,因为首先我需要解决这个问题。我遇到的问题是,它不会削减第一行,但它会以我想要的方式切割所有其他行。这弄乱了我的if语句,给出了太多的论据。这是我现在运行脚本的结果:
Which event do you want to search for?
CallTilEdb
CallTilEdb 8 #first line of the file
CallCustomer
CallTilEdb
CustomerChk
CustomerChk
CallTilEdb
bin/vistid.sh: line 11: [: too many arguments
The sum is 0
我对bash很新,所以这可能是一个愚蠢的问题,但我无法理解它。任何有关我如何解决这个问题的指南都非常感谢。
PS:现在回显f1只是为了看看导致错误的原因。
答案 0 :(得分:2)
您可以使用read
本身将该行拆分为两个字段。
#!/bin/bash
declare -i sumTime=0
echo "Which event do you want to search for?"
read event
while read -r column1 column2
do
if [ "$column1" = "$event" ];then
sumTime+=$column2
fi
done < "$1"
echo "The sum is $sumTime"
答案 1 :(得分:0)
或者,您基本上可以使用一行来实现计数循环,例如
$ grep CallTilEdb data | tr -s ' ' | cut -f 2 -d ' ' | awk '{total = total + $1}END{print "The sum is " total}'
The sum is 28