Bash: 목표 날짜를 날짜 범위와 비교

Bash: 목표 날짜를 날짜 범위와 비교

대상 날짜와 두 개의 열 집합(첫 번째 열은 임의의 숫자이고 두 번째 열은 최신부터 오래된 날짜 순)이 주어지면 날짜가 가장 가깝지만 이전인 행에서 숫자를 찾고 싶습니다. 목표. 예를 들어, 다음과 같은 상황이 주어집니다.

표적:2018-12-03 19:09:56.250641

목록:

5346    2018-12-06 17:44:35.010724
6347    2018-12-05 17:50:46.475593
7284    2018-12-04 18:32:11.665405
0298    2018-12-02 22:28:04.59453
1836    2018-12-02 22:27:47.585642
6653    2018-12-02 21:26:13.942103
9274    2018-12-02 21:23:28.318704

나는 돌아오고 싶다 0298. 가장 깨끗한 방법은 무엇입니까?

답변1

날짜가 Y-M-D H:M:S순서대로 되어 있으므로 텍스트(사전순 또는 일반 용어로 사전순)로 비교할 수 있습니다.

두 개가 아닌 세 개의 필드(열)가 있습니다. 첫 번째 열의 구분 기호가 다른 열의 구분 기호와 다르지 않은 경우. 구분 기호를 공백으로 표시할 때 그것이 공백인지 탭인지 또는 다른 것인지 알 수 있는 방법이 없습니다. 세 개의 열이 공백이나 탭으로 구분되어 있다고 가정합니다.

이 문제를 해결하려면 검색 날짜 값으로 변수를 설정하고 다음 명령을 사용하십시오.

 s='2018-12-03 19:09:56.250641'

 awk -vs="$s" '( $2" "$3 < s ){ print $1; exit }' infile

그건:

  • 필드 2와 3의 연결된 값을 검색된 값과 비교합니다.
  • 이 비교가 성립할 때(2부)
  • 첫 번째 열을 인쇄하고 종료합니다.

답변2

나도 보통 이 작업을 수행 awk하지만 동일한 결과를 얻는 텍스트 도구 파이프라인은 다음과 같습니다.

$ echo "0000    $s" | sort -k2 - infile | grep -B1 "$s" | head -1 | cut -d" " -f1
0298

관련 정보