0

我有一个日志文件 ( file.log),其中包含多个 id,即82244956在一个文件中。 file.log已使用以下命令创建:

gzip -cd /opt/log.gz | grep "JBOSS1-1" >> ~/file.log

例子 :

2012-04-10 09:01:18,196 LOG  (7ysdhsdjfhsdhjkwe:IN) JBOSS1-1 (RP-yedgdh5567) [PayPalWeb] Fetch data with id: 82244956  
2012-04-10 09:02:18,196 LOG  (24343sdjjkidgyuwe:IN) JBOSS1-1 (RP-yedgdh5567) [PayPalWeb] Fetch data with id: 82244956  
2012-04-10 09:03:18,196 LOG  (6744443jfhsdgyuwe:IN) JBOSS1-1 (RP-yedgdh5567) [PayPalWeb] Fetch data with id: 82244957  
2012-04-10 09:04:18,196 LOG  (7ysdhsd5677dgyuwe:IN) JBOSS1-1 (RP-yedgdh5567) [PayPalWeb] Fetch data with id: 82244957  

同样,我们有 10000 行具有不同的 id(但每个 id 重复 2-3 次。此示例中的示例顶部和底部 2 行分别以 id 82244956 和 82244957 重复)。我们需要基于 UNIQUE id 的结果集(匹配 id 中的任何行),即:

2012-04-10 09:01:18,196 LOG  (7ysdhsdjfhsdhjkwe:IN) JBOSS1-1 (RP-yedgdh5567) [PayPalWeb] Fetch data with id: 82244956  
2012-04-10 09:03:18,196 LOG  (6744443jfhsdgyuwe:IN) JBOSS1-1 (RP-yedgdh5567) [PayPalWeb] Fetch data with id: 82244957  

我试图在 Linux 上 awk 程序,但没有成功:

awk ' { arr[$1]=$0 } END { for ( key in arr ) { print arr[key] } } ' file.log >> final-report.log

或者更好的方法是file.log仅使用不同的 id 创建。

请告知我该如何修改它?

4

3 回答 3

3

$1是第一个字段,日期。用术语来说,是id最后一个字段。所以:$NFawk

awk '{arr[$NF] = $0} END { for (key in arr) { print arr[key] } }' file.log >> final-report.log

这将使用给定键保留最后一条记录。要保留第一条记录,您必须在脚本的主要处理部分进行条件赋值。

于 2012-04-19T06:57:02.927 回答
1
awk '!_[$NF]++' file.log >> final-report.log
于 2012-04-19T07:40:17.873 回答
0

您可以通过运行以下脚本来获得结果。要保留第一个记录,您应该在脚本的主要处理部分进行条件判断。

awk -F"\t" '{delete arr;split($0,arr,"id:"); id_num=arr[2];
             if(!(id_num in dic)){line[id_num]=$0;dic[id_num];}}
            END{for(i in line)print line[i] }' file.log  > result.log
于 2012-04-19T09:53:48.240 回答