2012-11-22 5 views
2

에서 날짜를 추출 나는 강타 할 새로운 오전과 내가 같은 파일이 있습니다 루프에서배쉬 : 파일

2012-11-22 11:36:55,909 1353551815756 1353551815909 0 true myapi 10 203051 203051:ShopDb:ShopDb 
2012-11-22 11:37:00,292 1353551820146 1353551820292 0 true myapi 10 201897 201897:ShopDb:ShopDb 
2012-11-22 11:38:01,824 1353551881672 1353551881824 0 true myapi 10 203051 203051:ShopDb:ShopDb 

을 줄 나는 날짜 부분 (2012년 11월 22일 11시 36분을 추출 할 : 55) 타임 스탬프로 변환하여 변수에 할당 (또는 단순히 bash는이를 달성하기 위해 어떻게 지?

+0

"타임 스탬프로 변환"이란 무엇을 의미합니까? 신기원 이래로 초로 변환 하시겠습니까? 아니면 숫자 이외의 것을 제거 하시겠습니까? 게시 된 입력에 대한 예상 출력을 게시하면 도움이됩니다. –

답변

2
$ while IFS=" ," read f1 f2 f3 
> do 
> echo $f1 $f2 
> done < file 
2012-11-22 11:36:55 
2012-11-22 11:37:00 
2012-11-22 11:38:01 

을 공간에 IFS을 설정하고 쉼표로 1 2 개 필드를 추출하는 것을 쉽게 while 루프.

+0

타임 스탬프 부분을 추가하십시오 :) –

1

당신을 위해 날짜를 추출합니다 다음

awk 'BEGIN{FS="[ ,]"; OFS=" ";} {print $1, $2}' input_file 
1

cut 명령을 사용하여이 각 행에서 19까지 문자 하나를 추출합니다

cut -c1-19 file 

.

은 첫 번째 줄에 검색하려면 다음

head -n 1 file | cut -c1-19 

을하고 bash는 변수에 그 할당 :

myTime=$(head -n 1 file | cut -c1-19) 
2

당신은 타임 스탬프를 얻을 떠들썩한 배열을 사용하여 캡처 GNU awk을 사용할 수 있습니다 :

array=($(awk -F, '{ print mktime(gensub(/[:-]/," ","g",$1))}' file.txt)) 

그런 다음 반복 할 수 있습니다.

012 3,516,
for i in "${array[@]}"; do echo "$i"; done 

결과 :

1353548215 
1353548220 
1353548281 

하거나 인쇄 할 하나를 선택;

echo "${array[1]}" 

결과 :

1353548220 
3

또한 그것을 할 수있는 방법의 하나로서, 날짜 명령을 사용할 수 있습니다 예를 들어, 두 번째 요소를 에코합니다.

while IFS=, read x y; do 
    date --date "$x" +%s 
done < file.txt 

+%s은 원하는대로 타임 스탬프로 변환합니다.

+0

고양이와 컷을 쓸모 없게 사용하십시오. 'IFS =, read -r x y 인 동안; 해야 할 것...; done

+0

^^ 네, 맞습니다 ... 나는 awk 대신에 일을하기 위해 날짜 명령을 사용하는 것을 강조하고 싶었습니다 ... 대답을 편집하십시오. – anishsane