diff --git a/edosl0util/cli.py b/edosl0util/cli.py
index ff4b0bcb0d0182e6b3265160b115b5095ebda497..60051fbb4ae5eb9d4336a0f88a3847366102614d 100644
--- a/edosl0util/cli.py
+++ b/edosl0util/cli.py
@@ -2,8 +2,28 @@
 Console script entry points for CLI tools.
 """
 import os
+from datetime import datetime
 
-from edosl0util import split
+from edosl0util import split, trunc
+
+
+def _timestamp(v):
+    return datetime.strptime(v, '%Y-%m-%d %H:%M:%S')
+
+
+def cmd_trunc():
+    from argparse import ArgumentParser
+    parser = ArgumentParser()
+    parser.add_argument('-o', '--output')
+    parser.add_argument('filename')
+    parser.add_argument('start', type=_timestamp)
+    parser.add_argument('end', type=_timestamp)
+    args = parser.parse_args()
+
+    output = args.output or os.path.basename(args.filename) + '.trunc'
+    with open(output, 'wb') as fptr:
+        for pkt in trunc.trunc_file(args.filename, args.start, args.end):
+            fptr.write(pkt.blob)
 
 
 def cmd_split():
diff --git a/edosl0util/trunc.py b/edosl0util/trunc.py
new file mode 100644
index 0000000000000000000000000000000000000000..38cdf80dbe89a8cd9c459495eaa04bf846fb0faa
--- /dev/null
+++ b/edosl0util/trunc.py
@@ -0,0 +1,21 @@
+
+from edosl0util.stream import PacketStream
+
+
+def trunc_stream(stream, start, end):
+    stream.seek(start)
+
+    pkt = stream.next()
+    while pkt.stamp <= end:
+        # first pkt in group
+        yield pkt
+        # following pkts in group
+        pkt = stream.next()
+        while pkt.stamp is None:
+            yield pkt
+            pkt = stream.next()
+
+
+def trunc_file(filename, start, end):
+    stream = PacketStream(open(filename))
+    return trunc_stream(stream, start, end)