Как получить и сравнить два значения из файла? [closed]

0
24.05.2016, 15:53
3 ответа

Этот 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
2
28.01.2020, 02:35

Вот как получить первые две отметки времени:

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

0
28.01.2020, 02:35

Этот 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
0
28.01.2020, 02:35

Теги

Похожие вопросы