2012-04-19 8 views
0

ファイル内に複数のID(82244956)があるログファイル(file.log)があります。 file.logは、コマンドを使用して作成されています:grepユニークな出現

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で繰り返されています)。私たちは、すなわち固有のIDに基づいて、結果セット(マッチしたIDSから任意の行を)必要があります。

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

それとも、より良い方法だろう:私は成功していないものをLinux上でawkプログラムにしようとしたが、

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 

異なるIDを持つ file.logを作成することができます。

どうすれば変更できますか?

+0

ソート順は重要ですか?そうでない場合は、ファイルを 'sort'でパイプし、' uniq'で再度パイプして一意の行を与えます。いくつかのパラメータを渡して、並べ替えたいフィールドを指定する必要があります。 –

答えて

3

$1は、日付の最初のフィールドです。 idは最後のフィールドで、$NFawkにあります。したがって:

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

これは、指定されたキーで最後のレコードを保持します。最初のレコードを保持するには、スクリプトのメイン処理部分で条件付き代入を行う必要があります。

+0

私のために働く:) – ErAB

1
awk '!_[$NF]++' file.log >> final-report.log 
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