테이블에 0 값 삽입

테이블에 0 값 삽입

NxN 테이블에 마지막 열을 넣으려고 하는데 0 값이 누락되었습니다. 테이블에 접근하려면 awk/xarg를 사용할 수 있을 것 같은데, 0이 누락되어야 합니까? 처음 두 열은 원본 데이터 파일의 식별자일 뿐입니다. 이 경우 첫 번째 열은 1에서 2로, 두 번째 열은 1에서 5로, 마지막 열은 누락된 0을 삽입해야 하는 실제 데이터입니다. 식별자의 길이는 항상 해당 행 및 열과 동일합니다. 실제로는 1000행의 데이터가 존재하지만, 위의 예시는 단순화된 예시로 실제 데이터 세트에 적합합니다.

편집: 명확히 하기 위해 1000은 첫 번째 열의 범위가 1-1000이고 두 번째 열의 범위도 1-1000임을 의미합니다. 하지만 세 번째 열에 0 값을 추가하려는 행이 누락되었습니다. 다만, 아래 예시에서는 가능하다면 더 큰 파일에도 가능하다고 생각합니다.

데이터 세트

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

관련 정보