같은 파일의 다른 열의 값을 기반으로 제자리에있는 파일을 편집하고 싶습니다 (열 값 대체). 파일. 대체 후 출력을 다른 파일로 리디렉션하고 싶지 않지만 대신 파일을 편집하고 싶습니다. 특히 편집해야하는 파일에 프로그램이 동시에 액세스 할 수 없으며 현재 위치에서의 편집이 반드시 필요하므로같은 파일의 다른 열의 값을 기반으로 제자리에서 파일을 편집하고 싶습니다.
나는 아래 코드를 시도했습니다. 하지만 다시 한 줄씩 파일을 입력하려고합니다.
#!/usr/bin/perl -w
open(FILEIN, "/dummy/chaat/h2") || die("Cannot open file");
@file = <FILEIN>;
seek FILEIN, 0, 0;
foreach $file (@file) {
@field = split(/\|/, $file);
print $field[8] . "\n";
if ($field[8] eq "ROBERT") {
$file =~ s/JAMES/FUDIK/g;
print FILEIN $file;
}
}
샘플 레코드는 다음과 같습니다. 여기서 나는 이것을 인라인 편집하고 싶다. 필드 8 로버트 다음 필드에 FUDIK와 제임스를 대체 할 경우 7
Change|sinmg|ewfewf|ewfew|def|fdfd|JAMES|rewr|ROBERT|dsf|fe
Change|sinmg|ewfewf|ewfew|def|JAMES|fewf|rewr|BEASLEY|dsf|fe
나는이
새 필드가 이전 필드와 완전히 같은 크기가 아니라면 파일을 다시 쓰지 않아야합니다. 의도 한 경우 데이터베이스를 사용하십시오. – Thor
@Thor TLP의 대답은 필드 크기와 관계없이 작동합니다. – Chkusi
'-i' 스위치는 내부에서 말할 수 있지만 임시 파일은 백그라운드에서 사용됩니다 (perlrun (1) 참조). – Thor