2009-06-02 8 views
0

ログファイルから日付と時刻を解析できるようにしたいと考えています。現在は次の形式になっています:UNIXのログファイル出力で行を分割する方法

「02/Jun/2009:14:38:50」ですが、linuxコマンドラインから入手可能なものを使用して異なるカラムでそれらを区切りたいと思います。次のようになります。

「02/6月/ 2009」「午後二時38分50秒」

誰かがこれを行うことができる方法についてのいくつかの光を当てるしてくださいだろうか?

よろしく

答えて

3

クリスの答えは最高です。あなただけが特定の形式でラインに影響を与えるために必要がある場合は、ここでは何か:AWKの

cat log | sed -e 's/"\([^:]*\):\([^"]*\)"/"\1" "\2"/' 
+0

これは完璧に働いた、ありがとう! – JDR

+0

'cat'の役に立たない使用:' sed -e '...'

1

それはすべてのことが、各ライン上にあるなら、多分:他のフォーマットとは行が存在しない場合

cat file.txt | sed -e 's/:/" "/' 
+1

これは、最初の:のみを(意図的に)その文字列で置き換えることに注意してください。また、その出力を元のファイルにリダイレクトしないでください。そうしないと、空のファイルになります。 –

0

サブ()関数は1を返しますが、置換が成功した場合、その:

cat file.txt | awk 'sub(/:/,"\" \"")' 

GNU awkは(gensubを使用することができます)関数なので、これは以下のバックリファレンスのサンプルです。

cat file.txt | gawk '$0=gensub(/("[^:]*):([^"]*")/,"\\1\" \"\\2",1)' 
1

ピュアバッシュ:と最初のコロンの前と後に分け、正規表現 ":&:& & &" を探すために

while read line ; do echo ${line/:/\" \"}; done < logfile 
0

biterscript。 (&は任意の数の任意の文字を意味します)。

var str log 
cat "logfile" > $log 
while ({ sen -r "^&:&:&:&^" $log } > 0) 
do 
    var str datetime, date, time 
    stex -r "^&:&:&:&^" $log > $datetime 
    stex -p "]^:^" $datetime > $date # String before the first : is date. 
    stex -p "^:^[" $datetime > $time # String after the first : is time. 
    echo $date "\t" $time 
done 

試しには、ビットスクリプトをダウンロードできます。 Google上にインストールするか、インストール手順はhttp://www.biterscripting.comにあります。

関連する問題