0

IDが複数回出現するログファイル(file.log)があります。つまり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  

同様に、異なるIDを持つ10000行があります(ただし、各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 に答える