use warnings;
$reff_filepath="/home/sharma/Documents/ref.txt";
open (CONFIG,"<","$reff_filepath")or die "Unable to open $reff_filepath: $!";
while(<CONFIG>) {
chomp;
@cols = (split(/ /))[2];
push(@array, @cols);
print "@array\n";
}
close CONFIG;
我得到的输出是:
在
公民投票 关于公投法案 在全民投票比尔压倒性的 在公投上,压倒性的法案压倒了 在全民投票上,压倒性的法案宣告了比尔 在全民投票法案压倒性地声称比尔政府
但我的预期输出是
在
公投
比尔
铺天盖地
声称
比尔
型政府
解释:我正在尝试使用Perl打印每个句子的第三个单词。上面我写了我的Perl脚本。我得到了我在上面所期望的输出。但是我将这个输出推送到数组中,就像这样push(@array, @cols)
然后我得到了我上面提到的第一个输出。请任何人给出建议或重写Perl脚本以显示我期望的输出。
答案 0 :(得分:1)
如果您想打印每个第三个字,请使用
@cols = grep {not ++$i % 3} (split /\s+/)
答案 1 :(得分:0)
您正在循环的每次迭代中打印数组。
您需要在循环外移动“print”,并为数组的每个元素添加“\ n”:
push(@array, @cols);
}
print "$_\n" foreach @arr;
答案 2 :(得分:0)
打印出每行第三个单词(不是句子)的一行解决方案 - 它不会打印出少于3个单词的空行:
perl -e '@a = map { (split /\s+/)[2] } <>; $" = "\n"; print "@a\n";'
此解决方案将打印空行,其中少于3个单词:
perl -e 'print map { (split /\s+/)[2] . "\n" } <>;'
答案 3 :(得分:-1)
如何将输入分隔符定义为“。”?
$/ = .;
while(<>) {
$i = 0;
@words = split(/\s+/);
while ($i <= $#words) {
push (@array, @words[$i]);
$i+=3;
}
}
print "@array\n";
或类似的东西(我没有尝试运行此脚本)。你不要试图得到每个句子的每个第三个单词,而是整个文档中的每个第三个单词。