这应该是一个明智的选择,但显然我今天没有大脑。
我有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 ...)
会很棒答案 0 :(得分:2)
试试这个:
while read -r txid
do
grep "$txid" server.* > "$txid.log"
done < txids.txt
和文件排序 - 将一位数字重命名为两位数字,前导零,例如mv server.log.1 server.log.01
。