Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
File 是否有返回txt文件倒数第二行的函数或安排?_File_Perl - Fatal编程技术网

File 是否有返回txt文件倒数第二行的函数或安排?

File 是否有返回txt文件倒数第二行的函数或安排?,file,perl,File,Perl,文档包含三行或更多行,即列表的大小 doc03053220190606125901(1.txt.total.txt Tamafo total: 512 MB Total 43046✔ Total 14758 Tamano total: 1.0 GB Total 156253✔ , Total 761273 doc05889820190606122032(2.txt.total.txt Tamafo total: 512 MB Total 43046✔ Total 14758 Tamano

文档包含三行或更多行,即列表的大小
doc03053220190606125901(1.txt.total.txt

Tamafo total: 512 MB
Total 43046✔
Total 14758
Tamano total: 1.0 GB
Total 156253✔
, Total 761273
doc05889820190606122032(2.txt.total.txt

Tamafo total: 512 MB
Total 43046✔
Total 14758
Tamano total: 1.0 GB
Total 156253✔
, Total 761273
在txt文档中,我只想打印最后一行之前的第一行

我尝试在没有push函数的情况下应用pop函数,再次运行pop并为我带来倒数第二行 或者在印刷时,我举一个例子


my@arreglo=$row;
pop@arreglo“$files\n”
打印@arreglo[-1]“\n”;
foreach$filename(@FILES){
##变化的内容
打印$filename,“\n”;
##除此之外,所有的建筑都有

打开(我的$file,Gama,这里不需要复杂的脚本。Unix tail命令将为您完成此任务

@last_two_lines = `tail -n2 $filename`;
print $last_two_lines[0];

Gama,这里不需要复杂的脚本。Unix tail命令可以帮您完成

@last_two_lines = `tail -n2 $filename`;
print $last_two_lines[0];

要求:打印从第二行到最后一行的输入

显而易见的解决方案是将所有输入都拖到一个数组中,但如果输入太大,则会浪费内存。您还应该处理输入少于两行的情况

我的解决方案是:保留一个只包含最后两行的数组。在到达输入的末尾之前,您不会知道看到了倒数第二行

#!/usr/bin/perl

use strict;
use warnings;

my @last2 = ();
while (<>) {
    if (scalar @last2 >= 2) {
        shift @last2;
    }
    push @last2, $_;
}
if (scalar @last2 >= 2) {
    print $last2[-2];
}
else {
    die "Not enough input\n";
}
!/usr/bin/perl
严格使用;
使用警告;
我的@last2=();
而(){
如果(标量@last2>=2){
最后2次移位;
}
按@last2,$\u;
}
如果(标量@last2>=2){
打印$last2[-2];
}
否则{
die“输入不足\n”;
}

要求:打印输入的倒数第二行

显而易见的解决方案是将所有输入都拖到一个数组中,但如果输入太大,则会浪费内存。您还应该处理输入少于两行的情况

我的解决方案是:保留一个只包含最后两行的数组。在到达输入的末尾之前,您不会知道看到了倒数第二行

#!/usr/bin/perl

use strict;
use warnings;

my @last2 = ();
while (<>) {
    if (scalar @last2 >= 2) {
        shift @last2;
    }
    push @last2, $_;
}
if (scalar @last2 >= 2) {
    print $last2[-2];
}
else {
    die "Not enough input\n";
}
!/usr/bin/perl
严格使用;
使用警告;
我的@last2=();
而(){
如果(标量@last2>=2){
最后2次移位;
}
按@last2,$\u;
}
如果(标量@last2>=2){
打印$last2[-2];
}
否则{
die“输入不足\n”;
}

也许可以在西班牙语版本的stack overflow上发布。请编辑并翻译成英语,或者发布到es.stackoverflow.com。我仍然不知道开头是什么意思…?因为在重新打开之前我无法回答(如果有),这里有两种方法:(1)阅读整个文件,将行放入数组中,然后打印
$行[-2]
(上一行之前的一行)(2)如果文件太大,无法打印,请先通读它以计算行数,然后再重新阅读,这样您就可以知道打印哪一行了。如果需要进行两次扫描,或者文件太大,速度太慢,那么您可以记录(一些)位置(
pos
)在文件中计算行数,然后适当地搜索,而不是进行第二次完整传递。@gama larios,如果它可以是一个大文件,请使用。如果它是一个小文件,您还可以将整个文件读入内存(
my@lines=;$lines[-2]
)@zdim,我坚信这些是文件的内容,在这种情况下,文件似乎包含了关于某个东西的大小信息。我真的不知道它可能是其他任何东西。因此,编辑。也许可以在stack overflow的西班牙语版本上发布。请编辑并翻译成英语,或者发布到es.stackoverflow.com。我仍然没有线索开头的意思是什么…?因为在重新打开之前我无法回答(如果打开了),这里有两种方法:(1)读取整个文件,将行放入数组,然后打印
$lines[-2]
(最后一行之前)(2)如果文件太大,无法打印,请先通读以计算行数,然后再重新阅读,此时您将知道要打印哪一行。如果两次扫描都让您感到麻烦,或者文件太大且速度太慢,则可以记录(一些)位置(
pos
)在文件中计算行数,然后适当地搜索,而不是进行第二次完整传递。@gama larios,如果它可以是一个大文件,请使用。如果它是一个小文件,您还可以将整个文件读入内存(
my@lines=;$lines[-2]
)@zdim,我坚信这些是文件的内容,在这种情况下,文件似乎包含了关于某个东西的大小信息。我真的不知道它可能是其他任何东西。因此编辑。这假设
tail
命令可用。例如,它不太可能在Windows上工作。而且,它也不处理这种情况ere输入短于2行。这假设
tail
命令可用。例如,它不可能在Windows上工作。此外,它不处理输入短于2行的情况。不需要调用
scalar
,因为在“scalar context”(此处由
>=
设置)中数组根据其大小进行求值,然后使用它;因此只需
@last2>=2
@zdim:True,这是不需要的,但这是一种我希望更明确的情况。不需要调用
标量
,因为在“标量上下文”(此处由
=
设置)中数组将根据其大小进行求值,然后使用它;因此只需
@last2>=2
@zdim:True,这是不需要的,但在这种情况下,我希望更加明确。