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