Unix grep行在上面并连接

Unix grep行在上面并连接,unix,grep,Unix,Grep,这是我从日志文件中输入的示例 #2014 03 06 11:21:44:028#+1300# xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx [UserID= testUser] 我要做的是遍历所有日志条目,在“UserID=”上执行grep命令,然后获取上面的第2行(时间戳)。然后,我希望我的输出文件将这两个文件连接到tempLog.txt文件中 #2014 03 06 11:21:44:028#+1300# [UserID= testUser]

这是我从日志文件中输入的示例

#2014 03 06 11:21:44:028#+1300#
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
[UserID= testUser]
我要做的是遍历所有日志条目,在“UserID=”上执行grep命令,然后获取上面的第2行(时间戳)。然后,我希望我的输出文件将这两个文件连接到tempLog.txt文件中

 #2014 03 06 11:21:44:028#+1300# [UserID= testUser]
有人能帮我吗?对Unix来说还是有点陌生…)

谢谢 克里斯

更新的虚拟数据

#2.#2014 03 06 11:21:29:163#+1300#Info#/System/Security/Audit/Logon#
#xxxxxx (Has white spaces)
Logon failed    | LOGIN.ERROR   | null  |       | Login Method=[default], IP Address=[xx.xx.xxxx], UserID=[testUser], Reason=[Authentication did not succeed.]#
试试这句话:

grep --group-separator="" -B2 'UserID=' file|awk -v RS="" -F '\n' '{$2=""}7'
测试:

试试这句话:

grep --group-separator="" -B2 'UserID=' file|awk -v RS="" -F '\n' '{$2=""}7'
测试:


awk
应能:

awk '/#20/ {f=$0} /\[UserID/ {print f,$0}' file
#2014 03 06 11:21:44:028#+1300# [UserID= testUser]

awk
应能:

awk '/#20/ {f=$0} /\[UserID/ {print f,$0}' file
#2014 03 06 11:21:44:028#+1300# [UserID= testUser]

使用
man grep
并查看您的
grep
是否具有
-C、-B、-A
选项。祝你好运,谢谢。它确实有选项,但使用-B包括不需要的行xxxxxxxxxxxxxxxx使用
man grep
,并查看您的
grep
是否有
-C,-B,-A
选项。祝你好运,谢谢。它确实有选项,但使用-B包括不需要的XXXXXXXXXXXXXXXXXX行,非常感谢您的帮助。你能给我讲讲逻辑吗?我正在跟踪管道,但我不明白你在用awk做什么。(不幸的是,它不能正常工作。很可能是因为我过于简化了虚拟数据)@Chris在grep之后,我们有
3行,空行,3行…
结构。awk使用
空行作为记录sep,新行(
\n
)作为字段sep,因此
xxxx
将作为第二个字段。我将它设置为空,因为您不希望它出现在输出中
OFS
未设置,因此它是默认值:空白。所以我们有了输出。如果你不明白什么是RS什么是FS或OFS,你必须阅读
man awk或man gawk
才能找到答案。谢谢你的帮助,肯特。将进一步使用它来调整我的输入。您的代码在我的初始虚拟数据上运行得非常好,因此将其标记为已解决!非常感谢你的帮助。你能给我讲讲逻辑吗?我正在跟踪管道,但我不明白你在用awk做什么。(不幸的是,它不能正常工作。很可能是因为我过于简化了虚拟数据)@Chris在grep之后,我们有
3行,空行,3行…
结构。awk使用
空行作为记录sep,新行(
\n
)作为字段sep,因此
xxxx
将作为第二个字段。我将它设置为空,因为您不希望它出现在输出中
OFS
未设置,因此它是默认值:空白。所以我们有了输出。如果你不明白什么是RS什么是FS或OFS,你必须阅读
man awk或man gawk
才能找到答案。谢谢你的帮助,肯特。将进一步使用它来调整我的输入。您的代码在我的初始虚拟数据上运行得非常好,因此将其标记为已解决!