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

问题描述:

我有以下脚本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中挑选每个值并在中搜索该模式210文件。

将模式找到的次数分配给变量i

我打算检查i的值,如果它是0或者找不到模式,那么我希望该模式存储在另一个文件中。

目前,我正在

./parser.sh: line 7: cat: No such file or directory 

我曾尝试在命令行cat命令,它一直很好,但它是从脚本中给这个错误。

您正在尝试使用名为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的报价为http://tldp.org/LDP/abs/html/commandsub.html命令替换的bash中描述的讨论和。

+0

谢谢@Tichodroma。虽然我没有得到预期的结果,但这很奏效。尽管我知道该文件出现了1次模式,但我的变量的值仍然为0。 – Macky

+0

为什么使用grep的'-w'选项?这意味着'只选择那些包含形成整个单词的匹配的行。'这是你想要的吗? – 2013-08-19 10:00:16

+0

是的,所以基本上我有像abcd abc abcde在不同的行上的值。我想选择搜索模式(例如:abc)与数值完全匹配的行。 – Macky

因为它假定cat作为文件名。

尝试在命令行5 < cat中,它会抛出相同的错误。