如何为文件中的每一行执行命令?

时间:2016-04-27 08:24:56

标签: perl

open my $directory, '<', abc.txt 

chomp(my @values = <$directory>);

有一个名为abc.txt的文件,其中包含以下内容:

abcde
abc
bckl
drfg
efgt
eghui
webnmferg

通过以上几行,我将文件abc.txt的内容发送到数组

意图是创建一个循环来在文件abc.txt

的所有行上运行命令

有关创建循环的任何建议吗?

2 个答案:

答案 0 :(得分:3)

open my $directory_fh, '<', abc.txt or die "Error $! opening abc.txt";
while (<$directory_fh>) {
    chomp; # Remove final \n if any
    print $_; # Do whatevery you want here
}
close $directory_fh;

我更喜欢使用 _fh 对所有文件句柄进行后缀,以使它们更加明显。

while (<fh>)循环播放文件的所有行。

如果文件可能具有Windows / MS-DOS格式,您可能需要/想要删除最终\r

答案 1 :(得分:1)

  

创建一个循环以在文件abc.txt的所有行上运行命令

foreach my $line (@lines){
        #assugming $cmd contains the command you want to execute
        my $output = `$cmd $line`;
        print "Executed $cmd on $line, output: $output\n";
}

编辑:根据塞巴斯蒂安的反馈

my $i = 0;
while ($i <= $#lines){
        my $output = `$cmd $lines[$i]`;
        print "Executed $cmd on $lines[$i], output: $output\n";
}

如果你可以破坏阵列,那么:

while (@lines){
        my $line = shift @lines;
        my $output = `$cmd $line`;
        print "Executed $cmd on $line, output: $output\n";
}

如果您想要两次没有引用数组的安全代码,可以在列表赋值中使用splice。

while (my ($line) = splice(@array, 0, 1)) {
        my $output = `$cmd $line`;
        print "Executed $cmd on $line, output: $output\n";
}