将零值插入表中

将零值插入表中

我试图将最后一列放入 NxN 表中,但缺少零值。为了到达表格,我想我可以使用 awk/xarg,但需要缺少零吗?前两列只是原始数据文件中的标识符。在这种情况下,第一列从 1 到 2,第二列从 1 到 5,最后一列是需要插入缺失零的实际数据。标识符的长度始终与对应的行和列相同。实际上,实际上有 1000 行数据,但上面的示例是简化示例,适用于真实数据集。

编辑:澄清一下,1000 的意思是第一列的范围是 1-1000,第二列的范围也是 1-1000。但缺少我想在第三列中添加零值的行。不过,我认为如果可以为下面的示例完成,那么也可以为更大的文件完成。

数据集

1   1   5
1   2   4
1   4   2
2   1   5
2   2   6
2   3   5

预期数据集

1   1   5
1   2   4
1   3   0
1   4   2
1   5   0
2   1   5
2   2   6
2   3   5
2   4   0
2   5   0

我尝试使用 python 使用这里的建议信用-heemayl

with open('test.sum') as f:
    check = 0
    for line in f:
        if int(line.split()[1]) == check + 1:
            check = int(line.split()[1])
            print line.rstrip()
        else:
            check = int(line.split()[1])
            print int(line.split()[1]) - 1, '\t0'
            print line.rstrip()
    print int(line.split()[1]) + 1, '\t0'
    print int(line.split()[1]) + 2, '\t0'

但看起来它在 1 和 2 相交的行之间添加了一个零(在第一列中),而且我似乎无法让它在 3 列上工作。不过,可以接受 awk 或任何更简单的想法!

非常感谢您的帮助!

答案1

可能不是 1000x1000 行的最佳性能,但它可以完成工作并且应该相当容易理解:

for i in {1..2}; do
    for j in {1..5}; do
        grep "^$i[[:blank:]]*$j" file || printf '%s\t%s\t0\n' $i $j
    done
done

相关内容