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