제목이 그다지 설명이 유용하지 않을 수 있습니다. 설명해 드리죠 :다른 텍스트 파일에서 텍스트 파일의 인덱스를 가져 오는 중
내가 파일을 가지고 (말 1 파일) 몇 가지 숫자를 [A 공간으로 구분] . 내가 (말 2 파일) 몇 가지 숫자 [A 탭로 구분] 을 가진 다른 파일을 이곳
1 2 3 4 5
1 2 8 4 5 6 7
1 9 3 4 5 6 7 8
..... n lines (length of each line varies).
를 참조하십시오. I는 합계 원하는 라인
1 1 1 1 1 1 0 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 0 1 1 1 1 1
1 1 1 1 1 1 0 1 1 1 1 1
..... m lines (length of each line fixed).
제가 1 2 3 4 5 번째 (파일 1 라인 1) 위치 파일 2 의 합계를 원하는 여기서 1참조 1 2 3 4 5 6 7 (파일 1 라인 2) 위치는 파일 2, 라인 1은 등입니다.
open(FH1, "File1.txt");
@index = <FH1>;
open(FH2, "File2.txt");
@matrix = <FH2>;
open(OUTPUT, ">sum.txt");
foreach $xx (@matrix) {
@k1 = split(/\t/, "$xx");
foreach $yy (@index) {
@k2 = split(/ /, "$yy");
$ssum = 0;
foreach $zz (@k2) {
$zz1 = $zz - 1;
if ($k1[$zz1] == 1) {
$ssum++;
}
}
printf OUTPUT"$ssum\t";
$ssum = 0;
}
print OUTPUT"\n";
}
close FH1;
close FH2;
close OUTPUT;
그것을 : 나는 다음과 같은 코드로 이런 짓을
5 6 6 …n columns (File 1)
1 8 3
9 8 4
… m rows (File 2)
:
내가 좋아하는 일
그것은 모양 위치 2 모든 라인 파일에 파일의 라인 방식의 합을 원하는 그것을 제외하고는 절대적으로 잘 작동하지만, 대용량 파일의 경우 시간 요구량이 엄청납니다.
내 데이터가 4 번이 예제를 초과 할 수 있습니다 시간은 팔분입니다 그리고 내 사용자에 대한 용납
어떻게 이러한 목표를 달성하기 위해, 훨씬 덜 소모 :. (예를 들어 1000 선은 1 X 25000 선이 두 파일 파일.. 시간. 또는 다른 개념이다.
내가 추측 손 foreach 문을 압연보다 더 빨리해야하는 sum' ,'split'은'@indexes '요소에 대해 여러 번 수행되지 않습니다. –
Btw, do 블록 안에서'open'의 목적은 무엇입니까; $ fh 범위를 제한하고 자동으로 파일을 닫으시겠습니까? –
그게 사실이 코드는 아마 읽을 수 있습니까? :) – Miller