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

날짜와 시간이 두 번째와 세 번째 위치에 있고 쉼표로 구분된 경우

변수를 저장하고 싶다면 이렇게 할 수 있습니다

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

관련 정보