2017-04-05 1 views
-1

while 루프를 사용하여 큰 ascii 텍스트 파일을 반복하고 그 내용을 설정된 증가분으로 작성하는 awk 스크립트를 만들었습니다. ASCII 텍스트 파일은 일반적으로 정수 또는 부동 소수점 값으로 만들어진 DEM 파일입니다.큰 데이터 반복을위한 aww

이 스크립트는 다른 큰 ASCII 파일에서도 작동하지만 일부 파일의 경우에는 설정된 증분 대신 모든 파일 내용을 새 파일에 기록합니다. 이 코드를보다 효율적으로 만들 수있는 방법은 무엇입니까?

#!/bin/csh 
set Index = 0 
set filename = 320000 
set yorig = -1003 
set cellsize = 0.00025 
set LineCounter = 0 

while($Index <= $filename) 
echo $Index 
awk -v i="$Index" -v y="$yorig" -v rows="$filename" -v delta="$cellsize" -v linecount="$LineCounter" 'BEGIN{printf("ncols 136000\nnrows 320000\nxllcorner 122\nyllcorner %.5f\ncellsize 0.00025\nNODATA_value -9999\n", y+rows*delta-(i+1)*delta);}; {if(NR > 6 && NR <= 4000+i) print $0;}' ./Large_ASCII_FIle.txt >! $Index"_Increment.txt" 
@ Index += 4000 
end 


Input Data looks like the following: 
ncols   136000; 
nrows   320000; 
xllcorner  122; 
yllcorner  -1003; 
cellsize  0.00025; 
NODATA_value -9999; 
707 707 707 706 706 706 706 706 707 706 706 706 706 706 707 707 708 709 710 711 712 712 712 711 711 711 711 711 711 711 711 710 710 710 710 710 710 710 710 710 710 710 710 710 710 710 710 710 710 710 710 710 710 710 710 710 709 709 709 710 710 709 709 709 709 709 709 710 710 710 709 709 709 709 709 709 708 708 707 707 707 706 706 706 705 705 704 704 704 704 704 704 704 704 704 703 703 703 703 703 703 703 703 703 703 703 702 702 702 702 702 702 702 702 702 702 701 701 701 701 701 701 701 701 701 701 701 701 701 701 700 700 700 700 701 700 701 701 701 700 700 700 700 700 700 700 700 

Desired Output Would be: 
ncols  136000; 
nrows   320000; 
xllcorner  122; 
yllcorner  -934; 
cellsize  0.00025; 
NODATA_value -9999; 
707 707 707 706 706 706 706 706 707 706 706 706 706 706 707 707 708 709 710 711 712 712 712 711 711 711 711 711 711 711 711 710 710 710 710 710 710 710 710 710 710 710 710 710 710 710 710 710 710 710 710 710 710 710 710 710 709 709 709 710 710 709 709 709 709 709 709 710 710 710 709 709 709 709 709 709 708 708 707 707 707 706 706 706 705 705 704 704 704 704 704 704 704 704 704 703 703 703 703 703 703 703 703 703 703 703 702 702 702 702 702 702 702 702 702 702 701 701 701 701 701 701 701 701 701 701 701 701 701 701 700 700 700 700 701 700 701 701 701 700 700 700 700 700 700 700 700 
+3

while 루프를 사용하는 awk 스크립트는 아니며 while 루프가 awk를 반복적으로 호출하는 CSH 스크립트입니다. CSH 스크립트 (google [ "CSH why not"] (https://www.google.com/search?q=csh+why+not&ie=utf-8&oe=utf-8))를 쓰지 마십시오. 사용하지 마십시오. 쉘을 사용하여 텍스트를 조작하십시오 (왜 [쉘을 사용하는 이유는 - 프로세스 - 텍스트 - 고려 - 나쁜 - 실천] 참조) (http://unix.stackexchange.com/questions/169716/why-is - 쉘 - 루프 - 프로세스 - 텍스트 - 고려 - 나쁜 - 관행)). 간결하고 견고한 샘플 입력 및 예상 결과를 포함하도록 질문을 던지십시오. 올바른 방법을 시도하는 모든 작업을 도와 드릴 수 있습니다. –

답변

0

필자가 볼 수있는 한, 큰 파일을 여러 조각으로 나누는 것이 기본 의도입니다. 이 같은 awk하여이 작업을 수행 할 수 있습니다

awk 'NR % 4000 == 1 { filename = "increment_" NR } NR > 6 { print > filename }' 

인쇄를 헤더 데이터 파일 이름을 설정 한 후.

관련 문제