如何从文件中检索并比较两个值?

如何从文件中检索并比较两个值?

如何检索并比较文件前两行中的两个值?我有以下文字:

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

此 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

以下是获取前两个时间戳的方法:

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),或者只是谷歌搜索您最喜欢的脚本语言。

答案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

相关内容