Этот shell-скрипт выведет вам разницу в секундах между временными метками во втором столбце первых двух строк:
( 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
Вот как получить первые две отметки времени:
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) или просто погуглить для вашего любимого языка сценариев.
Этот 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