ログ ファイルから日付と時刻を解析できるようにしたいと考えています。現在、それらは次の形式になっています。
「02/Jun/2009:14:38:50」ですが、Linuxコマンドラインから利用できるものを使用して、それらを異なる列に分けて、結果の出力が次のようになるようにしたいと思います:
"2009/06/02" "14:38:50"
誰かがこれをどのように行うことができるかについて光を当てることができますか?
よろしく
クリスの答えは、他の形式の行がない場合に最適です。その特定の形式の行にのみ影響を与える必要がある場合は、次のようになります。
cat log | sed -e 's/"\([^:]*\):\([^"]*\)"/"\1" "\2"/'
ピュアバッシュ:
while read line ; do echo ${line/:/\" \"}; done < logfile
それが各行にあるすべての場合、おそらく:
cat file.txt | sed -e 's/:/" "/'
正規表現 "&:&:&:&" を探し、最初のコロンの前後を区切る 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
試すには、biterscripting をダウンロードできます。Google で検索するか、インストール手順についてはhttp://www.biterscripting.comを参照してください。
awk の sub() 関数は、置換が成功すると 1 を返すので、次のようになります。
cat file.txt | awk 'sub(/:/,"\" \"")'
GNU awk は gensub() 関数を使用できるため、以下に後方参照のサンプルを示します。
cat file.txt | gawk '$0=gensub(/("[^:]*):([^"]*")/,"\\1\" \"\\2",1)'