gpt4 book ai didi

shell - AIX:使用 grep 命令记录文件中的两行

转载 作者:行者123 更新时间:2023-12-01 10:52:26 26 4
gpt4 key购买 nike

基本上 oracle 审计条目在我的 AIX 系统中存储为 .aud 文件

/oracle/SBX/saptrace/audit/

这些文件的条目看起来像这样:

Tue Jul  2 08:41:53 2013 +02:00
LENGTH : '159'
ACTION :[6] 'COMMIT'
DATABASE USER:[1] '/'
PRIVILEGE :[6] 'SYSDBA'
CLIENT USER:[6] 'orasbx'
CLIENT TERMINAL:[5] 'pts/0'
STATUS:[1] '0'
DBID:[10] '1854349635'

Tue Jul 2 08:41:53 2013 +02:00
LENGTH : '159'
ACTION :[6] 'COMMIT'
DATABASE USER:[1] '/'
PRIVILEGE :[6] 'SYSDBA'
CLIENT USER:[6] 'orasbx'
CLIENT TERMINAL:[5] 'pts/0'
STATUS:[1] '0'
DBID:[10] '1854349635'

Tue Jul 2 08:42:16 2013 +02:00
LENGTH : '222'
ACTION :[68] 'update SAPPRD.USR02 set uflag=64 where BNAME='CANAS' and MANDT='000''
DATABASE USER:[1] '/'
PRIVILEGE :[6] 'SYSDBA'
CLIENT USER:[6] 'orasbx'
CLIENT TERMINAL:[5] 'pts/0'
STATUS:[1] '0'
DBID:[10] '1854349635'

现在我在 crontab 中安排了一个 shell 脚本,让它每三个小时运行一次。

脚本是这样的:

#/bin/sh
grep -i USR02 /oracle/SBX/saptrace/audit/*.aud > /EDB/log/check_audit_dest.log
grep -i USH02 /oracle/SBX/saptrace/audit/*.aud >> /EDB/log/check_audit_dest.log
grep -i TCURR /oracle/SBX/saptrace/audit/*.aud >> /EDB/log/check_audit_dest.log
grep -i REGUH /oracle/SBX/saptrace/audit/*.aud >> /EDB/log/check_audit_dest.log
grep -i LFB1 /oracle/SBX/saptrace/audit/*.aud >> /EDB/log/check_audit_dest.log
grep -i LFA1 /oracle/SBX/saptrace/audit/*.aud >> /EDB/log/check_audit_dest.logs

此脚本的作用是,如果对这些表进行任何操作,它将将该行记录到 /EDB/log/check_audit_dest.log

像这样:

# cat /EDB/log/check_audit_dest.log
/oracle/SBX/saptrace/audit/sbx_ora_13828348_1.aud:ACTION :[68] 'update SAPPRD.USR02 set uflag=64 where BNAME='CANAS' and MANDT='000''
/oracle/SBX/saptrace/audit/sbx_ora_8847374_1.aud:ACTION :[67] 'update SAPPRD.USR02 set uflag=0 where BNAME='CANAS' and MANDT='000''

现在我想要的是除了该行之外我还希望每个条目的第一行都记录在该日志文件中(例如:Tue Jul 2 08:42:16 2013 +02:00).

谢谢

最佳答案

鉴于您发布的示例输入,您只需要:

$ awk -v RS= -F'\n' '/USR02|USH02|TCURR|REGUH|LFB1|LFA1/ {print FILENAME, $1, $3}' file
file Tue Jul 2 08:42:16 2013 +02:00 ACTION :[68] 'update SAPPRD.USR02 set uflag=64 where BNAME='CANAS' and MANDT='000''

如果不行,请发布一些更具代表性的输入和预期输出。

fedorqui 要求的解释

  • RS= => 记录之间用空行分隔
  • -F'\n' => 记录中的字段由换行符分隔
  • /USR02|USH02|TCURR|REGUH|LFB1|LFA1/ => 查找记录包含任何 | 分隔的字符串
  • print FILENAME, $1, $3 => 打印当前文件的名称,以及当前记录的第 1 和第 3 行/字段,第 1 行是日期,第 3 行是行动。

关于shell - AIX:使用 grep 命令记录文件中的两行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17426889/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com