![如何从文件中检索并比较两个值?](https://linux22.com/image/7458/%E5%A6%82%E4%BD%95%E4%BB%8E%E6%96%87%E4%BB%B6%E4%B8%AD%E6%A3%80%E7%B4%A2%E5%B9%B6%E6%AF%94%E8%BE%83%E4%B8%A4%E4%B8%AA%E5%80%BC%EF%BC%9F%20.png)
如何检索并比较文件前两行中的两个值?我有以下文字:
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