我知道这些问题已被多次回答,但我相信我的情况有点复杂。我有一个输入文件包含:
blabla bla
TimeGenerated 13:13:13
some text
some more text
AccountName Joe
bla bla
ObjectName d:\dir\
AccessType 0x444
bla text
blabla bla
TimeGenerated 13:13:15
some text
...
等等,重复相似的模式。 我的任务是将AccountNames,ObjectNames和AccessTypes变量收集到3个数组中,例如users [],objects [],types []。我不需要关心无关紧要的线条。解决方案必须优雅而快速。首先我想我会尝试像
这样的东西while read line;do
if [[ "$line" == 'AccountName*' ]] ... then put that into array...
if [[ "$line" == 'ObjectName*' ]] ... then put that into array...
但我认为这太难看了。必须有一个更好的方法。我正想着一些快速的闪电
awk '/AccountName/ {print $2}' logfile ....
...
但我不知道如何有效地使用此输出。 更多,我需要确保日志文件包含意外的不一致,例如一个ObjectName行以某种方式从AccountName和AccessType之间消失或者其值丢失,相关的数组元素获得一个静态字符串,例如“错误”。
答案 0 :(得分:1)
/AccountName/ { count++; user[count] = $2; object[count] = "error"; type[count] = "error" }
/ObjectName/ { object[count] = $2 }
/AccessType/ { type[count] = $2 }
END {
for (i = 1; i <= count; i++) {
print user[i], object[i], type[i];
}
}