我试图将最后一列放入 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