这应该是不费脑子的,但显然我今天没有脑子。
我有 50 个 20-gig 日志,其中包含来自多个应用程序的条目,其中一个在其日志行中添加了一个事务 ID。我需要查看 42 个事务 ID,我想将相应的行解析为单独的文件。
要做一个文件,命令很简单,
grep CDBBDEADBEEF2020X02393 server.log* > CDBBDEADBEEF2020X02393.log
从所有 50 个 server.log 中创建一个与该事务隔离的日志。
现在,我有一个包含 42 个 txnID 的文件(这里缩短为 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.* 文件按数字顺序排列(server.log.1、server.log.2 NOT server.log.1、server.log.10...)