我有以下脚本
#!/bin/bash
set i=0;
while read line
do
echo "$line";
$i < cat "my.log" | grep -w '$line' | wc -l;
echo "$i";
i=0;
done < "test.txt"
test.txt
的值类似于
abc
def
lmn
我的日志有像
这样的值> INFO 2013-08-16 13:46:48,660 Index=abc insertTotal=11
> INFO 2013-08-16 13:46:48,660 Index=abcd insertTotal=11
> INFO 2013-08-16 13:46:48,660 Index=def insertTotal=11
> INFO 2013-08-16 13:46:48,660 Index=abcfe insertTotal=11
目标是从test.txt
中选择每个值,并在my.log
文件中搜索该模式。
找到模式的次数分配给变量i
。
我将检查i
的值,如果它是0
或找不到模式,那么我希望将该模式存储在另一个文件中。
目前,我正在
./parser.sh: line 7: cat: No such file or directory
我在命令行上尝试了cat命令,它运行正常,但它在脚本中提供了这个错误。
答案 0 :(得分:4)
您正在尝试使用名为cat
的文件作为名为0
的命令的输入。那不行。
而不是
$i < cat "my.log" | grep -w "$line" | wc -l;
这样做:
i=$(cat "my.log" | grep -w "$line" | wc -l)
有关引号的讨论,请参阅问题Difference between single and double quotes in Bash;有关bash中命令替换的说明,请参阅http://tldp.org/LDP/abs/html/commandsub.html。
答案 1 :(得分:0)
因为它假定cat
为文件名。
在命令行5 < cat
中尝试此操作,它会抛出相同的错误。
答案 2 :(得分:0)
我有类似以下错误消息:
cat: command not found
curl: command not found
它是由这样的代码引起的:
export PATH=$1
export SERVER=$(cat s_remote)
curl $@ $SERVER$PATH
解决方案是将PATH变量重命名为其他名称。外壳程序会在本地使用PATH,并出于其他目的将其设置为混乱的外壳程序。