【发布时间】:2012-09-16 19:31:11
【问题描述】:
我想根据同一文件中另一列中的值编辑文件(替换列值)。我不想在替换到另一个文件后重定向输出,而是想就地编辑文件。特别需要这个,因为需要编辑的文件不会被任何程序同时访问,因此必须进行就地编辑
我尝试了下面的代码。但这又是逐行写入输入文件
#!/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
如果有任何帮助,我将不胜感激
【问题讨论】:
-
除非新字段与前一个字段的大小完全相同,否则您无法避免重写文件,如果这是您的意图,请使用数据库。
-
@Thor 以下来自 TLP 的回答是有效的,与字段大小无关
-
-i开关可能会说就地,但在后台使用了一个临时文件,请参阅perlrun(1)。
标签: linux perl shell unix nawk