使用带输入文件的grep和通配符创建文件

时间:2013-05-17 18:21:00

标签: shell redirect grep cygwin wildcard

这应该是一个明智的选择,但显然我今天没有大脑。

我有50个20-gig日志,其中包含来自多个应用的​​条目,其中一个将事务ID添加到其日志行。我有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

但这不起作用。将shebang改为#/ bin / bash -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 NOT server.log.1,server.log.10 ...)

会很棒

1 个答案:

答案 0 :(得分:2)

试试这个:

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

和文件排序 - 将一位数字重命名为两位数字,前导零,例如mv server.log.1 server.log.01