Unix Cat:没有这样的文件或目录错误

时间:2013-08-19 09:42:22

标签: shell unix

我有以下脚本

#!/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命令,它运行正常,但它在脚本中提供了这个错误。

3 个答案:

答案 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,并出于其他目的将其设置为混乱的外壳程序。