파일에서 두 값을 검색하고 비교하는 방법은 무엇입니까? [폐쇄]

파일에서 두 값을 검색하고 비교하는 방법은 무엇입니까? [폐쇄]

파일의 처음 두 줄에서 두 값을 어떻게 검색하고 비교할 수 있나요? 다음 텍스트가 있습니다.

05-24-2016, 2:59:32,0,0
05-24-2016, 2:59:37,0,0
05-24-2016, 2:59:42,0,0
05-24-2016, 2:59:47,0,0
05-24-2016, 2:59:52,0,0
05-24-2016, 2:59:57,0,0
05-24-2016, 3:00:02,0,0

특정 열(예: 2:59:52)의 첫 번째 행 값을 비교하고 초 단위로 차이를 확인해야 합니다.

다음 명령을 사용하고 있지만 여전히 이해가 되지 않습니다.

awk '{ print $2 }' <filename>

처음 두 행 간의 차이만 필요합니다(나머지 행은 무시해야 함).

답변1

이 셸 스크립트는 처음 두 행의 두 번째 열에 있는 타임스탬프 간의 차이(초)를 가져옵니다.

( IFS=, read -r _ a _; IFS=, read -r _ b _; a=$(date --date $a +%s); b=$(date --date $b +%s); echo "$a - $b" | bc | tr -d - ) <filename

원하는 경우 다음과 같이 나눌 수도 있습니다.

(
    IFS=, read -r junk a junk        # Get second comma separated field
    IFS=, read -r junk b junk
    a=$(date --date $a +%s)          # Convert to seconds since the epoch
    b=$(date --date $b +%s)
    echo "$a - $b" | bc | tr -d -    # Compute signed difference, then discard unary minus sign
) <filename

답변2

처음 두 개의 타임스탬프를 가져오는 방법은 다음과 같습니다.

head -2 mydata.csv | awk -F, '{print$2}'

시대를 "비교"하는 것은 더 어려운 질문입니다. 어느 것이 더 빠른지 알고 싶다면 sort정렬된 순서로 되어 있는지 확인하도록 요청할 수 있습니다.

if head -2 mydata.csv | awk -F, '{print$2}' | sort -c 2> /dev/null
then
    echo "The first timestamp is earlier than the second"
else
    echo "The first timestamp is later than the second"
fi

실제로 타임스탬프 간의 차이를 계산하고 표시해야 한다면 이는 또 다른 질문입니다. 넌 적응할 수 있어이 답변(awk의 경우) 또는 좋아하는 스크립트 언어를 Google에 검색해 보세요.

답변3

awk스크립트는 처음 두 행의 두 번째 열에 있는 타임스탬프 간의 차이를 초 단위로 제공합니다.

awk -F, '{ cmd = "date --date " $2 " +%s "; cmd | getline sec[NR] } NR>2 { exit } END { print (sec[2] > sec[1]) ? (sec[2] - sec[1]) : (sec[1] - sec[2]) }' <filename

원하는 경우 다음과 같이 나눌 수도 있습니다.

awk -F, '
    # Read a line, get column two and convert it to seconds since the epoch
    { cmd = "date --date " $2 " +%s "; cmd | getline sec[NR] }

    # After two lines start to exit
    NR>2 { exit }

    # At exit print the absolute value of the difference between the two times
    END { print (sec[2] > sec[1]) ? (sec[2] - sec[1]) : (sec[1] - sec[2]) }

' <filename

관련 정보