2013-05-17 23 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