Perl 脚本仅读取输入文件的最后一行
我的输入文件中的值(list_muni_nav.txt)。每一行都是一个文件的路径,这里的“test”和“test2”是文件名Perl 脚本仅读取输入文件的最后一行,perl,scripting,Perl,Scripting,我的输入文件中的值(list_muni_nav.txt)。每一行都是一个文件的路径,这里的“test”和“test2”是文件名 /iwmnt/default/main/Content/Munic/WORKAREA/work/templatedata/muni_site/security/data/test /iwmnt/default/main/Content/Munic/WORKAREA/work/templatedata/muni_site/security/data/test2 我的pe
/iwmnt/default/main/Content/Munic/WORKAREA/work/templatedata/muni_site/security/data/test
/iwmnt/default/main/Content/Munic/WORKAREA/work/templatedata/muni_site/security/data/test2
我的perl脚本(如下)应该读取输入文件中的每一行并执行它们。但是,除了最后一行之外,脚本没有找到其余的行。请看结果
my $content_list = '/home/p12/scripts/list_muni_nav.txt';
print "\t*****************START***************************\n";
print "\tOpening file $content_list\n";
if (open FILE,"$content_list") {
my $line = <FILE>;
chomp($line);
while ($line ne "") {
print "\t Applying EAs to file $line\n";
my $setEAVersion= "$getAttrib -s TeamSite/Assocation/Version=1 \"$line\"";
`$setEAVersion`;
my $setEADCRType= "$getAttrib -s TeamSite/Templating/DCR/Type=muni_site/nav \"$line\"";
`$setEADCRType`;
my $setEAFormValid= "$getAttrib -s iw_form_valid=true \"$line\"";
`$setEAFormValid`;
print "\t EAs applied successfully to $line\n";
print "\t**********************************************************\n";
$line = <FILE>;
chomp($line);
}
请帮忙。谢谢 我认为@stark是对的,你的问题是换行符。将删除与特殊变量
$/
对应的任何尾随字符串,这在Windows和Linux上是不同的。您可以使用正则表达式来解决此问题:
my $content_list = '/home/p12/scripts/list_muni_nav.txt';
print "\t*****************START***************************\n";
print "\tOpening file $content_list\n";
if (open my $fh, "<", "$content_list") {
while (my $line = <$fh>) {
$line =~ s/\s+$//;
print "\t Applying EAs to file $line\n";
my $setEAVersion= "$getAttrib -s TeamSite/Assocation/Version=1 \"$line\"";
`$setEAVersion`;
my $setEADCRType= "$getAttrib -s TeamSite/Templating/DCR/Type=muni_site/nav \"$line\"";
`$setEADCRType`;
my $setEAFormValid= "$getAttrib -s iw_form_valid=true \"$line\"";
`$setEAFormValid`;
print "\t EAs applied successfully to $line\n";
print "\t**********************************************************\n";
}
my$content_list='/home/p12/scripts/list_muni_nav.txt';
打印“\t*************************开始********************************************\n”;
打印“\t打开文件$content\u列表\n”;
如果(打开我的$fh,"您的输出似乎显示循环运行了两次,每行一次。我是否遗漏了什么?您好,Tom,脚本运行了两次,因为输入文件中有两行。每行是文件的路径,这里的“test”和“test2”是文件名。好的,所以问题不在于循环本身。如果颠倒输入文件中的行顺序,会发生什么文件?明显的问题,您是否检查过文件test
是否确实存在?是的,test和test2两个文件存在于同一位置。我使用VI编辑器更改了输入文件中的顺序,发现“test”和“test2”的定位错误。当我更改顺序时(“test”在最后一行)在Windows记事本中并使用WinSCP在Linux框中上载输入文件时,仅“test2”出现位置错误。听起来像是错误的换行符。在Windows上编辑后,您将获得一个额外的字符。这非常有用。非常感谢@Tom。非常感谢您的帮助。@user3235274没问题,很高兴您将其排序。
my $content_list = '/home/p12/scripts/list_muni_nav.txt';
print "\t*****************START***************************\n";
print "\tOpening file $content_list\n";
if (open my $fh, "<", "$content_list") {
while (my $line = <$fh>) {
$line =~ s/\s+$//;
print "\t Applying EAs to file $line\n";
my $setEAVersion= "$getAttrib -s TeamSite/Assocation/Version=1 \"$line\"";
`$setEAVersion`;
my $setEADCRType= "$getAttrib -s TeamSite/Templating/DCR/Type=muni_site/nav \"$line\"";
`$setEADCRType`;
my $setEAFormValid= "$getAttrib -s iw_form_valid=true \"$line\"";
`$setEAFormValid`;
print "\t EAs applied successfully to $line\n";
print "\t**********************************************************\n";
}