python - 使用 sed / awk / bash 将缺失的行号填充到文件中
问题描述
我有一个(制表符分隔的)文件,其中每行的第一个“单词”是行号。但是,缺少一些行号。我想插入新行(带有相应的行号),以便在整个文件中,行上打印的数字与实际行号匹配。(这是为了以后在 readarray 中使用 cut/awk 来获取行号之后的行。)
我已经在 python 中编写了这个逻辑并测试了它的工作原理,但是我需要在没有 python 的环境中运行它。实际文件大约有 10M 行。有没有办法使用 sed、awk 甚至只是普通的 shell / bash 来表示这个逻辑?
linenumre = re.compile(r"^\d+")
i = 0
for line in sys.stdin:
i = i + 1
linenum = int(linenumre.findall(line)[0])
while (i < linenum):
print(i)
i = i + 1
print(line, end='')
测试文件看起来像:
1 foo 1
2 bar 1
4 qux 1
6 quux 1
9 2
10 fun 2
预期输出如:
1 foo 1
2 bar 1
3
4 qux 1
5
6 quux 1
7
8
9 2
10 fun 2
解决方案
像这样,与awk
:
awk '{while(++ln!=$1){print ln}}1' input.txt
解释,作为多行脚本:
{
# Loop as long as the variable ln (line number)
# is not equal to the first column and insert blank
# lines.
# Note: awk will auto-initialize an integer variable
# with 0 upon its first usage
while(++ln!=$1) {
print ln
}
}
1 # this always expands to true, making awk print the input lines
推荐阅读
- python - 遍历字典的 values()
- python - 如何在 Redis 中从 hmset() 切换到 hset()?
- powershell - 如何在同一文件夹中使用 powershell 生成 Zip
- jquery - 画布中精灵左右无限循环
- c++ - 在 BAZEL 中,有没有办法防止依赖 C/C++ 标头传播到依赖库?
- vuetify.js - 如何在多个启用的 v-select 组件中预先选择选项?
- python - Python中的真假测验功能
- php - 调用未定义的方法 App\Mail\OrderPlaced::views()
- python - 随机值命令无法正常工作 - Python
- r - R list - 扩展向量元素以列出具有相同名称的元素