テーブルにゼロ値を挿入する

テーブルにゼロ値を挿入する

NxNテーブルに最後の列を入れようとしましたが、ゼロ値がありません。テーブルにアクセスするにはawk / xargを使用できますが、ゼロが欠けている必要がありますか?最初の2つの列はソースデータファイルの識別子にすぎません。この場合、最初の列は1から2、2番目の列は1から5、最後の列は欠落している0を挿入する必要がある実際のデータです。識別子の長さは常に対応する行と列と同じです。実際には1000行のデータが存在しますが、上記の例は単純化された例であり、実際のデータセットに適しています。

編集:明確にするために、1000は最初の列の範囲が1〜1000で、2番目の列の範囲も1〜1000であることを意味します。しかし、3番目の列にゼロ値を追加したい行がありません。ただし、以下の例では、可能であればより大きなファイルにも可能だと思います。

データセット

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を使ってみました。クレジットヘマイル

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が交差する行(最初の列)の間に0を追加しているように見え、列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

おすすめ記事