私のログには次のパターンがあります。
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