同じファイル内の別の列の値に基づいて、その場でファイルを編集(列の値に置き換え)したい。置換後に出力を別のファイルにリダイレクトしたくはありませんが、ファイルをその場で編集したいと思います。特にこれが必要なのは、編集が必要なファイルは、どのプログラムからも同時にアクセスされることはなく、インプレース編集が必要だからです。
以下のコードを試してみました。しかし、これも入力ファイルに1行ずつ書き込んでいます
#!/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がROBERTの場合、フィールド7でJAMESをFUDIKに置き換えます。
Change|sinmg|ewfewf|ewfew|def|fdfd|JAMES|rewr|ROBERT|dsf|fe
Change|sinmg|ewfewf|ewfew|def|JAMES|fewf|rewr|BEASLEY|dsf|fe
これについて助けていただければ幸いです