3

我有以下脚本

#!/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 命令,它运行良好,但它在脚本中给出了这个错误。

4

3 回答 3

7

您正在尝试使用一个名为的文件cat作为命令的输入0。那是行不通的。

代替

$i < cat "my.log" | grep -w "$line" | wc -l;

做这个:

i=$(cat "my.log" | grep -w "$line" | wc -l)

有关引号的讨论,请参阅问题Bash 中单引号和双引号之间的区别,有关 bash 中命令替换的描述,请参阅http://tldp.org/LDP/abs/html/commandsub.html 。

于 2013-08-19T09:46:42.470 回答
1

我有如下错误消息:

cat: command not found
curl: command not found

它是由这样的代码引起的:

export PATH=$1
export SERVER=$(cat s_remote)

curl $@ $SERVER$PATH

解决方案是将 PATH 变量重命名为其他名称。PATH 由 shell 在本地使用,并且将其设置为不同的目的会干扰 shell。

于 2020-02-12T11:19:33.407 回答
0

因为它假设cat为文件名。

在命令行中试试这个5 < cat,它会抛出同样的错误。

于 2013-08-19T09:47:29.740 回答