2017-12-09 1 views
2

다음 데이터가 .csv 파일에 있으며 새 데이터가 다운로드 될 때 변경됩니다. 분의 양이 내가 파일에 전환 추적범위를 선택하는 데 사용되는 Bash 문자열

lower_bound=`date -d '1 day ago' "+%Y-%m-%dT%H%M%S"` 
upper_bound=`date -d '12 hours ago' "+%Y-%m-%dT%H%M%S"` 

입니다 : 현재

2017-12-08T194949 
2017-12-08T194952 
2017-12-08T195000 
2017-12-08T195007 
2017-12-08T195007 
2017-12-08T195014 
2017-12-08T195016 
2017-12-08T195016 
2017-12-08T195016 
2017-12-08T195016 
2017-12-08T195021 
2017-12-08T195026 
2017-12-08T195029 
2017-12-08T195030 
2017-12-08T195030 
2017-12-08T195034 
2017-12-08T195051 
2017-12-08T195101 
2017-12-08T195105 
2017-12-08T195135 
2017-12-08T195138 
2017-12-08T195140 
2017-12-08T195144 
2017-12-08T195148 
2017-12-08T195154 
2017-12-08T195204 
2017-12-08T195205 
2017-12-08T195219 
2017-12-08T195223 
2017-12-08T195224 
2017-12-08T195225 

, 내가 사용하여 내 datestrings을 정의 : 데이터의 구문은 아래의 예는 항상-MM-DDTHHMMSS YYYY이다 시스템 시간에 따라 다릅니다. 내가 되돌릴 금액을 임의로 설정할 수 있습니다. 그 전환 확인 기간이 문자열을 감안할 때

sed -n "/$lower_bound/,/$upper_bound/p" data.csv 
awk -v a="$lower_bound" -v b="$upper_bound" '/a/{flag=1;next}/b/{flag=0}flag' data.csv 

은, 위의 명령은 두 변수 사이에, $의 LOWER_BOUND 및 $ UPPER_BOUND에서 날짜의 범위를 인쇄해야합니다

나는 다음과 같이 내가/AWK SED와 긴밀한 입수했습니다 생각 . 분명히, 나는 앞서 언급 한 변수들에서 서로 다른 회상 (lookback) 시간을 실험했다.

날짜 범위가 인쇄되지 않는 이유에 대한 아이디어가 있으십니까? 어떤 도움이라도 대단히 감사하겠습니다. 미리 감사드립니다.

+0

$ 날짜에 오류가 의미합니다, 당신은이 날짜의 알파벳 비교를해야하는 기간에 인쇄 할 경우

- 내가 더 많은 샘플 데이터를 제공 및 변경 – hallettwx

+1

최적이 아니지만 가지고있는 것보다 낫다. 'awk -va = "$ lower_bound"-vb = "$ upper_bound"'$ 1> = a && $ 1 <= b''. –

+1

@gniourf_gniourf - 감사합니다. 나중에 참조 할 수 있도록 $ 1과 (과) 비교하는 이유는 무엇입니까? – hallettwx

답변

1

여기 : /a/"a"과 일치합니다. 이 : $0 ~ a 당신이 변수 a에 저장 한 문자열과 일치하는 것입니다, 그래서 당신의 명령은 다음과 같아야합니다

awk -v a="$lower_bound" -v b="$upper_bound" 
    '$0 ~ a {flag=1;next} $0 ~ b {flag=0} flag' data.csv 

그러나이 AWK/SED 명령은 실수가 라인을 일치 수 있기 때문에 당신이 원하는 무엇을 제공하지 않습니다 정확한 datetime 범위가 로그에있는 경우에 대비합니다. 아마 정확한 하한값이 존재하지 않으므로 플래그가 절대로 설정되지 않습니다. 당신이이 $0 > a$0 < b

awk -v a="$lower_bound" -v b="$upper_bound" '$0 > a && $0 < b' data.csv 
관련 문제