tclを使用してログから時間を抽出する場合

tclを使用してログから時間を抽出する場合

私のログには次のパターンがあります。

1,30.10.2014,07:51:07,0,0,1,12,28,255,3,255,255,255,0,0,0;
2001,30.10.2014,07:51:07,0,0,0,300,5,0,255;

日付と時刻を抽出する必要があります...最初の行に対して、次の操作を行います。

set starttime [string range $procline 2 20]

しかし、識別子(時間より前のコード)が長い場合、どのように抽出できますか?私はExpect(tcl)を使用しています。文字列の一致を試しましたが、何かが間違っているようです。行がロードされました$procline

私はフォーラムで見つけた他の答えとは異なるさまざまなアプローチを試しましたが、実際に私に合うものはありません。

答え1

テクトロニクス:

set fields [split $procline ,]
set timestamp [join [lrange $fields 1 2]]
set time [clock scan $timestamp -format "%d.%m.%Y %T"]

またはため息で:

set time [clock scan [join [lrange [split $procline ,] 1 2]] -format "%d.%m.%Y %T"]

答え2

awkを使う

awk -F ',' '{print $2,$3}' log_file.txt

日付と時刻が2番目と3番目の位置にあり、カンマで区切られた場合

変数を保存したい場合は、これを行うことができます

while read x;do a=`echo $x | awk -F ',' '{print $2,$3}'`;
#now do whatever you want to do with your variable 
done < log_file.txt

答え3

望まない場合はawkご利用いただけます。bash bultins

 IFS=, read a MY_DATE MY_TIME b <<< $procline ; echo $MY_DATE $MY_TIME

関連情報