0

みんな、この小さなジレンマを誰か助けてくれませんか

文字列が重複している行を syslog テキスト ファイルから削除しようとしています

3 月 10 日 06:51:11[http-8080-1] INFO com.MYCOMPANY.webservices.userservice.web.UserServiceController [u:2533274802474744|360] [platformI$tformIdAndOs=2533274802474744|360, userRegion=America|360] を承認

それから数行下

3 月 10 日 06:52:03 [http-8080-1] 情報 com.MYCOMPANY.webservices.userservice.web.UserServiceController [u:2533274802474744|360] [platformI$tformIdAndOs=2533274802474744|360、userRegion=アメリカ|360] を承認

au: 番号に関して同じことを取得しましたが、重複を削除して 1 つだけ残す必要があり、ファイルには異なる u: 番号の複数の重複があり、14,000 行の長さです。

awkを使用できるかどうか誰か教えてもらえますか? セド?または、このようなものを並べ替えますか?重複している特定の文字列を含む行を削除します。

私は基本的に重複除外する必要がありますが、問題は文字列のほんの一部がインジケーターであることです。

どんな助けでも大歓迎です!ありがとう

4

1 に答える 1

0

おそらくこれを行うためのより良い方法がありますが、ここに私の最初の刺し傷があります:

  • まず、新しいファイルを作成し、uvalues.txt という名前を付けます。
  • ファイルを 1 行ずつ読み取り、各行について "u:" を grep し、結果を $u に格納します
  • $u が uvalues.txt に存在する場合、この行は無視します
  • $u が uvalues.txt に存在しない場合、この行を別のファイルに書き込み、$u を uvalues.txt に書き込みます。
  • 繰り返す

コードは次のようになります。

#!/bin/bash

touch uvalues.txt

for l in `cat file.txt`; do
        uvalue=`echo "$l" | grep "u:" | cut -f2 -d':' | cut -f1 -d'|'`
        #if uvalue is not empty, check it against our temp file
        if [ -n "$uvalue" ]; then
                existing_value=`grep "$uvalue" uvalues.txt`;
                #if it is empty, it means it's not a duplicate
                if [ -z "$existing_value" ]; then
                        echo $l >> save.txt
                        echo $uvalue >> uvalues.txt
                fi
        fi
done

rm uvalues.txt
于 2011-03-18T16:54:15.917 に答える