%EC%9D%98%20%ED%85%8D%EC%8A%A4%ED%8A%B8%20%ED%8C%8C%EC%9D%BC%EC%9D%84%20%EC%9D%BC%EB%B0%98%20%EA%B7%B8%EB%A6%AC%EB%93%9C%EC%97%90%20%EC%82%BD%EC%9E%85%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
일반 X/Y 그리드에 그려야 하는 3D 표면이 텍스트 파일에 있습니다. 그러나 X와 Y의 값은 일정한 간격을 두고 있지도 않고 반드시 오름차순일 필요도 없습니다. 주기적으로 X와 Y 좌표의 간격을 두고 Z 열에 값을 삽입해야 합니다. Z열에는 서브샘플링이 필요하지 않습니다.
Hear는 이 파일의 예입니다. 열은 X, Y 및 값(또는 Z)입니다.
50459.83 170405.62 0.01
50439.13 170384.92 0.03
50459.83 170384.92 0.04
50480.53 170384.92 0.01
50459.83 170364.22 0.13
50480.53 170364.22 0.14
50397.72 170343.51 0.27
50418.42 170343.51 0.33
50480.53 170343.51 0.32
50501.23 170343.51 0.36
50563.34 170343.51 0.29
나는 다음과 같은 출력을 원합니다 :
50460 170400 0.01
50440 170380 0.03
50460 170380 0.04
50480 170380 0.01
50460 170360 0.13
즉, 20x20 그리드에서 X와 Y를 샘플링하고 Z 열을 해당 그리드 점에 보간합니다(예제 출력에서는 이 작업을 수행하지 않았습니다).
파일은 수천만 줄로 구성되어 있습니다.
감사해요.
답변1
AFAICT 예제 입력 및 출력을 기반으로 첫 번째 필드를 가장 가까운 10으로 반올림하고 두 번째 필드를 가장 가까운 10으로 반올림하고 세 번째 필드를 유지하려고 합니다.
awk '{printf "%5.0f\t%6.0f\t%.2f\n", int($1/10+0.5)*10, int($2/10)*10, $3}' file
산출:
50460 170400 0.01
50440 170380 0.03
50460 170380 0.04
50480 170380 0.01
50460 170360 0.13
50480 170360 0.14
50400 170340 0.27
50420 170340 0.33
50480 170340 0.32
50500 170340 0.36
50560 170340 0.29