2016-07-19 3 views
0

私は現在、今月の監査データでファイルを取得し、毎日別のログファイルとして別のフォルダに出力するスクリプトを用意しています。 しかし、これらのファイルにすべてのメッセージを出力する必要はありません。ログメッセージのクリーンアップとフィルタリング

01-07-2016 09:28:23:687|1200-{Context 0x1bf81010} {Id DM_SERVER} {Component ww42697_allow_me_sysadmin} {Table SYS_C_COMP} {Message {Executed 0:Ok} Chg Component: Component=AN_UST_LV_HousePricePublisher_FREE, FriSched=0000-1330, UpdatedBy=ww42697_allow_me_sysadmin} {Time 9282368} {Date 20160701} {TimeStamp 1467379703} {Record {Component AN_UST_LV_HousePricePublisher_FREE} {Enabled 1} {MonSched 0000-1730;1830-2400} {TueSched 0000-1730;1830-2400} {WedSched 0000-1730;1830-2400} {ThuSched 0000-1730;1830-2400} {FriSched 0000-1330} {SatSched } {SunSched 1830-2400} {Path /opt/mkvanalyticsnylnx/1.72_U0/bin} {Argv -classname com/citigroup/fi/analytics/usd/housepricepublisher/HousePricePublisher -appcf usd/app_rv.cf -jinit usd/HousePricePublisher.properties -log4jxml core/log4j.xml -gficfgname GTE -autocp 1 -log4jrolling 0 -pwpstop 1 -rv 1 -java -DRV_VERSION=8.2} {WorkDir /var/opt/} {DbDir } {LogsDir } {KillScript } {KillScriptArgv } {RestartIfNotReg 1} {RestartNums 5} {TimeoutKill 20} {TimeoutNotReg 60} {UpdatedBy ww42697_allow_me_sysadmin} {UpdatedInfo 0} {StopOnCrash 0} {EngineType 1} {Executable mkv_start7} {Version } {ScheduleTemplate } {CompleteExeName 0} {ComponentType } {DirtyFlag 0} {UpdId 420} } {SeqId 286414} 

そして「前日比比率ユーザー」とライン:

01-07-2016 00:00:03:879|0638-{Context 0x1c316458} {Id DM_SERVER} {Component ar89576_PROD_SysAdmin} {Table SYS_C_USERS} {Message {Executed 0:Ok} Chg User: User=GTEApp, LastLoginTime=361} {Time 387} {Date 20160701} {TimeStamp 1467345603} {Record {UserID 149} {UserName GTEApp} {Password B0 C7 CC 83 FE CC D0 } {Type 2} {Passwdlen 21} {Auth 0} {AuthSource } {PasswdExt } {Disabled 0} {LoginMode 1} {DisablePasswdCheck 0} {PersonalInfo } {FailureCount 0} {LastLoginDate 20160701} {LastPwdChangeDate 0} {LastLoginTime 361} {CreationDate 0} {CreationTime 0} {LastEnableDate 0} {LinkedPolicy } {UpdatedBy ar89576_PROD_SysAdmin} {DirtyFlag 0} {UpdId 769760} } {SeqId 253929} 

は、さらにプラットフォームの初期設定を記録し、いくつかの行があるメッセージは、このように見えます。これらは、異なるフォーマットされていると私は必要はありません。

01-07-2016 00:00:03:879|0050-PSH::Config,ADD,ENT_REQTIMEOUT,60,3,NO DESCRIPTION 

私は、文字列「前日比比率コンポーネント」(一部ではなく、「前日比比率ユーザーを」持っている)が含まれて出力された行を必要とする、と私は取り除くしたいと思います空白またはカンマで区切られた各フィールドの角かっこは問題ありません。出力に期待されている私が持っている現在のスクリプト「前日比比率コンポーネント」を持つ行だけが少数のために働いている

01-07-2016 09:28:23:687,Component AN_UST_LV_HousePricePublisher_FREE,MonSched 0000-1730;1830-2400,TueSched 0000-1730;1830-2400,WedSched 0000-1730;1830-2400,ThuSched 0000-1730;1830-2400,FriSched 0000-1330,SatSched ,SunSched 1830-2400,Path /opt/mkvanalyticsnylnx/1.72_U0/bin,Argv -classname com/citigroup/fi/analytics/usd/housepricepublisher/HousePricePublisher -appcf usd/app_rv.cf -jinit usd/HousePricePublisher.properties -log4jxml core/log4j.xml -gficfgname GTE -autocp 1 -log4jrolling 0 -pwpstop 1 -rv 1 -java -DRV_VERSION=8.2,WorkDir /var/opt/,UpdatedBy ww42697_allow_me_sysadmin 

:下に私はフィールドの数だけでなく、私の例ごとのようにしたいです線や多くの

IN=/var/opt/MKV/platform15000/DM_SERVER/LOGS/AUDITING* 
grep "Chg Component" $IN > /home/rg39523/AUDIT_BY_DATE/AUDIT_COMP_CHG.log 

COMP_CHG=/home/rg39523/AUDIT_BY_DATE/AUDIT_COMP_CHG.log 

exec < $COMP_CHG while read line do 
    date=$(echo $line|cut -d" " -f 1) 
    INTWO=/home/rg39523/AUDIT_BY_DATE/AUDITING.log.$date 

    echo $line >> $INTWO done 

すべてのヘルプは大歓迎です...指定した日付のファイルに出力されていません。 :-)

答えて

0

あなたがexec <を使用し、なぜ私はフィールドが、これらの文字が含まれていないと仮定すると、ちょうどtrを使用}{を削除するには、通常、それはcat file | whileを使用して行われ、知り​​ません。また、元のファイル名を各行の先頭に入れたくないと思います(-hオプションをgrepに追加しました)。

IN=/var/opt/MKV/platform15000/DM_SERVER/LOGS/AUDITING* 
grep -h "Chg Component" $IN > /home/rg39523/AUDIT_BY_DATE/AUDIT_COMP_CHG.log 

COMP_CHG=/home/rg39523/AUDIT_BY_DATE/AUDIT_COMP_CHG.log 

cat $COMP_CHG | while read line do 
    date=$(echo $line|cut -d" " -f 1) 
    INTWO=/home/rg39523/AUDIT_BY_DATE/AUDITING.log.$date 

    echo $line | tr -d {} >> $INTWO 
done 
関連する問題