2013-08-19 146 views
1

我有以下腳本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命令,它一直很好,但它是從腳本中給這個錯誤。

回答

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的報價爲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

0

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

嘗試在命令行5 < cat中,它會拋出相同的錯誤。

相關問題