【发布时间】:2015-02-11 15:30:24
【问题描述】:
我有一个文件,其中包含每条消息的开始和结束时间:
msgid=1 11:34:12.410 11:34:12.464
msgid=2 11:34:12.465 11:34:12.563
msgid=3 11:34:12.563 11:34:12.577
msgid=4 11:34:12.849 11:34:12.850
msgid=5 11:34:12.950 11:34:12.951
我需要处理从一条消息结束到下一条消息开始所经过的时间。
这是我能想到的将所有信息放在一行上的最好方法(我可以从那里获取),但必须有一种更有效的方式来使用 awk 和/或 sed 而不是 while 循环。文件中有 20K 行,所以这很慢。
var=`cat <file>| wc -l`
i=1
while [[ "$i" -le "$var" ]]; do
awk 'NR=="'$i'" {print $1, $3}' <file>
awk 'NR=="'$(($i + 1))'" {print $1, $2}' <file>
i=$(($i + 1));
done
我用 awk 尝试过的方法总是推进记录并最终跳过一个,所以我会得到:
msgid=1 11:34:12.464 msgid=2 11:34:12.465
msgid=3 11:34:12.577 msgid=4 11:34:12.849
msgid=5 11:34:12.950 <..>
请注意缺少比较 msgid 2 和 3 等。
有什么想法吗?
更新我希望看到的输出格式:
msgid=1 11:34:12.464 msgid=2 11:34:12.465
msgid=2 11:34:12.563 msgid=3 11:34:12.563
msgid=3 11:34:12.577 msgid=4 11:34:12.849
msgid=4 11:34:12.850 msgid=5 11:34:12.950
谢谢, 安迪
【问题讨论】:
-
考虑编辑您的问题,以从您明智地包含在问题中的示例数据中包含所需的输出。在您的第一个问题中为示例数据、代码和良好的格式 +1!继续发布(但需要输出;-)!