- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我在一个可能持续 24 小时或更长时间的文件中有以下时间戳:
2014-11-11-04.01.05.000000
2014-11-11-04.03.33.000000
2014-11-11-04.06.02.000000
2014-11-11-04.08.31.000000
每个时间戳之间的间隔应小于 5 分钟。我如何将一个简单的 bash shell 脚本放在一起来解析文件并告诉我是否存在大于 5 分钟的间隔?我看到的最简单的方法是用上一行减去下一行。但是我不太擅长 bash shell 脚本。谁能帮忙?
最佳答案
这使用 GNU date
来解释时间。下面的代码从一个名为 file
的文件中读取,并遍历每一行,检查是否存在超过 300 秒的时间间隔:
while read newline
do
new=$(date -d "$(echo "$newline" | sed -E 's/-([0-9][0-9])\.([0-9][0-9])\./ \1:\2:/')" '+%s')
if [ "$old" ] && (( $new - $old > 300))
then
printf "%4i seconds gap before %s" "$((new - old))" "$newline"
fi
old=$new
done <file
让我们考虑这个测试文件:
$ cat file
2014-11-11-04.01.05.000000
2014-11-11-04.03.33.000000
2014-11-11-04.08.31.000000
2014-11-11-04.13.32.000000
2014-11-11-05.13.33.000000
以上脚本找出超过5分钟的两个间隔:
301 seconds gap before 2014-11-11-04.13.32.000000
3601 seconds gap before 2014-11-11-05.13.33.000000
观察到这可以检测到小至 5 分 1 秒的间隙。即使分钟没有变化,它也会检测到 1 小时的差距。
为了理解时间格式的所有潜在复杂性,GNU date
实用程序用于将时间转换为自纪元以来的秒数。这样做很简单:
$ date -d '2014-11-11 04:01:05.000000' '+%s'
1415707265
我的date
(较新的版本可能不同)不支持我们输入的确切格式:
$ date -d '2014-11-11-04.01.05.000000' '+%s'
date: invalid date `2014-11-11-04.01.05.000000'
但是,我们可以使用 sed
使格式看起来像上面有效的格式:
$ date -d "$(echo "$newline" | sed -E 's/-([0-9][0-9])\.([0-9][0-9])\./ \1:\2:/')" '+%s'
1416384000
接下来,就是将这些秒数放入 shell 变量中。为此,使用命令替换:
new=$(date -d "$(echo "$newline" | sed -E 's/-([0-9][0-9])\.([0-9][0-9])\./ \1:\2:/')" '+%s')
使用变量 new
中的最近时间,我们可以查看自上次时间以来是否已经超过 5 分钟(300 秒)(存储在变量 old
中) >),如果是,则打印出一条消息:
if [ "$old" ] && (( $new - $old > 300))
then
printf "%4i seconds gap before %s\n" "$((new - old))" "$newline"
fi
上面的第一个测试,[ "$old"]
确保变量 old
已经被定义。除了我们读入的第一行之外,它将始终被定义。因此,测试 [ "$old"]
的效果是跳过第一行。
第二个测试是(( $new - $old > 300))
。这只是确定自上一行以来是否已经超过 300 秒。
sed
不支持-E
怎么办对于 GNU sed
,-E
表示扩展正则表达式格式。在 Mac OSX 上,将使用 -r
代替它。如果您使用的是不支持 -E
的旧 linux 系统,我们可以尝试使用基本的正则表达式语法。尝试:
$ echo 2014-11-11-04.01.05.000000 | sed 's/-\([0-9][0-9]\)\.\([0-9][0-9]\)\./ \1:\2:/'
2014-11-11 04:01:05.000000
和:
$ date -d "$(echo 2014-11-11-04.01.05.000000 | sed 's/-\([0-9][0-9]\)\.\([0-9][0-9]\)\./ \1:\2:/')" '+%s'
1415707265
如您所见,基本正则表达式和扩展正则表达式之间的区别在于哪些字符必须转义。
如果可行,则使用:
while read newline
do
new=$(date -d "$(echo "$newline" | sed 's/-\([0-9][0-9]\)\.\([0-9][0-9]\)\./ \1:\2:/')" '+%s')
if [ "$old" ] && (( $new - $old > 300))
then
printf "%4i seconds gap before %s" "$((new - old))" "$newline"
fi
old=$new
done <file
关于linux - 寻找时间戳中的间隙,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27029912/
不确定是间隙还是音频样本未对齐,但是当我将音频文件一分为二时,如下所示: ffmpeg -ss 0 -t 00:00:15.00 -i song.mp3 seg1.mp3 和 ffmpeg -ss 0
我正在使用 NSDrawNinePartImage 绘制自定义按钮/文本字段。我在代码中将图像分割成九个部分,并使用 NSDrawNinePartImage 将其绘制到一个矩形中。 不幸的是,我在绘图
Check this image for the progressbar 知道如何消除 ProgressBar 下的那个小间隙吗?我怎样才能做到没有差距?应该通过 MainActivity 中的 ja
刚开始制作网站时,整个左侧都有几个像素的边距,但我不明白为什么。 http://jsbin.com/elufob/1/ 任何建议将不胜感激 CSS html{ min-width: 1
我一直在尝试在我的网站上使用静态图像,但页眉和图像之间存在很大差距,我尝试在 Photoshop 和 HTML 中删除填充并更改图像高度。这是我的问题的 fiddle https://jsfiddle
我前一段时间遇到过这个问题,忘记了解决方案是什么。我的文档顶部有一个小间隙,大概 5/10 像素? 我想你会知道我在说什么,我该如何摆脱它? 谢谢 最佳答案 在您的 CSS 文件中添加: html,
刚开始制作网站时,整个左侧都有几个像素的边距,但我不明白为什么。 http://jsbin.com/elufob/1/ 任何建议将不胜感激 CSS html{ min-width: 1
我正在尝试使用 Accordion MUI 组件在展开模式下不会移动,也不会对某些元素应用顶部和底部边距。 示例如下,但它不起作用,我的组件仍然太“跳跃”(扩展时它会增加宽度,并且添加了一些不可见的边
我有一个自定义 UITableViewCell Card 样式的动态高度,它的空间在应用程序中是恒定的。我正在使用 Storyboard ,并且在 UINavigationBar 下方有 UITool
假设您有一组日期范围 var arr = [ { "from": 'unix 1st of august', "until": 'unix 5th of august' },
我是radial-gradient的新手,我不知道这些多维数据集之间的背线或空格是什么?如何删除它们? * {margin: 0; outline: 0; border: 0;} .round {
我对 VBA 中的 HTML 正文有疑问。我创建了一封电子邮件并使用 HTML 填写信息。 我的问题描述如下: Reduce Gap between HTML and elements 但是我不能
我正在阅读 Lea Verou 的《CSS secret 》一书。 有一个圆 Angular 径向多重渐变的例子: http://dabblet.com/gist/24484257bc6cf7076a
我一直在为一个客户做一个元素,一切都很顺利,直到我注意到我的 h1/h2/h3(任何标题标签)已经向右移动了 2/3 像素。他们可能一直都在这样做,但我只是刚刚注意到。当您在 devtools 中突出
这里是 CSS 新手。奇怪的事情发生了,链接之间有间隙,我不知道为什么。 我正在使用 html html5 样板 css 进行重置。 HTML代码: Link 1 Link
这个问题在这里已经有了答案: margin on h1 element inside a div (3 个答案) 关闭 6 年前。 我有一个问题,我的 h1 标签与我的页面顶部分开 - 像这样:en
我希望我的文本在事件时带有下划线,但当我这样做时它看起来像这样: 我只希望文本有下划线,如果我使用 text-decoration:underline 它会在单词下划线,但我不知道如何在文本和下划线之
我似乎无法将这两张图片放在一起。它们都在 HTML 表格中自己的行中(我正在制作一封 html 电子邮件),但我似乎无法删除它们之间的 5px。 这是我的代码 它也在 jsfi
我正在尝试在我的项目中使用新的 CardView UI 小部件,但在某些运行 android 2.3 的设备上,CardView 角之间存在间隙(见下文)。 这是在我的 xml 文件中:
我想了解并学习当我使用共享边框填充两个形状/路径时遇到的问题的解决方案,即在为所有形状调用填充后,仍然有一个微小的间隙存在于他们之间。 该代码片段展示了绘制所涉及的形状/路径的代码: ctx.begi
我是一名优秀的程序员,十分优秀!