2013-05-17 52 views
1

這應該是一個沒有腦子的文件,但顯然今天我沒有腦子。創建使用grep和通配符輸入文件

我有包含來自多個應用程序,其中之一就將此交易ID其日誌條目線50 20演出日誌。我有42個事務ID需要查看,我想將相應的行解析爲單獨的文件。

做單文件,命令會簡單地說,

grep CDBBDEADBEEF2020X02393 server.log* > CDBBDEADBEEF2020X02393.log 

創建隔離到該事務日誌,來自50個server.logs。

現在,我有42個txnIDs(縮短至4在這裏)的文件:

CDBBDEADBEEF2020X02393 
CDBBDEADBEEF6548X02302 
CDBBDE15644F2020X02354 
ABBDEADBEEF21014777811 

我寫道:

#/bin/sh 
grep $1 server.\* > $1.log 

但是,這是行不通的。更改家當到#/斌/慶典-xv,給我這個奇怪的輸出(顯然我在玩什麼正確的逃生魔術必須):

$ ./xtrakt.sh B7F6E465E006B1F1A 
#!/bin/bash -xv 
grep - ./server\.\* 
' grep - './server.* 
: No such file or directory 

我也曾嘗試在命令行

grep - server.* <txids.txt> $1 

但很明顯的是$ 1沒有意義的,我不知道如何得到使用輸入每TxID添加命名的文件重定向命令的形式。

在此先感謝您的任何想法。我還沒有走過在shell腳本中執行foreach的路線,因爲我希望grep將原始文件名放在輸出行中,以便稍後在需要時檢查上下文。

而且 - 這將是巨大的,有服務器*文件排序數字(server.log.1,server.log.2不server.log.1,server.log.10 ...)

回答

2

試試這個:

while read -r txid 
do 
    grep "$txid" server.* > "$txid.log" 
done < txids.txt 

和文件排序 - 有一個數字重命名文件到兩位數,與領先的零,如mv server.log.1 server.log.01

+0

完美 - 謝謝! – user1944491