所以我有一系列脚本,它们会生成中间文本文件,作为跨不同脚本存储信息的一种方式。本质上,脚本会检测数据中已被用户批准删除的行。要从源文件中删除的行号存储在文件中。
例如,假设我有一个像这样的源数据文件:
a1,b1,c1,d1
a2,b2,c2,d2
a3,b3,c3,d3
a4,b4,c4,d4
a5,b5,c5,d5
a6,b6,c6,d6
a7,b7,c7,d7
中间文件将包含以下内容:
1 3 4 5 6
这将导致,当脚本运行时,输出数据文件如下:
a2,b2,c2,d2
a7,b7,c7,d7
这一切都很好,这段代码没有什么需要修复的。问题是,当我处理实际数据文件时,有时会在中间文件中存储数千个数字以供删除。这意味着我不能使用循环,因为它会花费大量时间,而且我当前的使用方法sed
会被error: too many arguments
. 许多行号是连续的,所以这是我提出问题的地方:
bash 或 awk 有没有办法检测一系列以空格分隔的数字是否连续?
我可以整理除此之外的所有内容,我只是对如何在一个/一系列步骤中做到这一点感到困惑。如果我可以检测到连续值,我的计划是将中间文件从以下位置更改:
1 3 4 5 6
至:
1 3-6
然后我将能够编写以更易于管理的方式在每个值范围内运行的代码。
如果可能的话,我想避免遍历每个值并单独检查它是否比前一个值高出一步,因为我正在处理列表中的数万个数字。
如果这在 bash/awk 中是不可能的,是否有另一种方法来完成此任务以减少传递给我的脚本的参数的总数并大大减少遇到太多参数错误的机会?