我有一个包含三列的文本文件。使用perl
,我试图遍历文本文件并搜索特定模式...
逻辑: IF column2 = 00z24aug2016 & column3 = e01
。当匹配此模式时,我需要解析匹配的行,然后解析下一行3
行。到新文件。
文字档案:
site1,00z24aug2016,e01
site1,00z24aug2016,e01
site1,00z24aug2016,e01
site1,00z24aug2016,e01
site2,00z24aug2016,e02
site2,00z24aug2016,e02
site2,00z24aug2016,e02
site2,00z24aug2016,e02
期望的输出......
新文件1:
site1,00z24aug2016,e01
site1,00z24aug2016,e01
site1,00z24aug2016,e01
site1,00z24aug2016,e01
新文件2:
site2,00z24aug2016,e02
site2,00z24aug2016,e02
site2,00z24aug2016,e02
site2,00z24aug2016,e02
答案 0 :(得分:3)
根据您对zdim和Borodin的回应,您似乎要求提供有关如何使用Perl而非实际工作代码的指示,所以我在此基础上回答。
您在问题的“逻辑”部分中描述的内容在Perl中非常简单明了 - 实际代码将远远短于此描述:
use strict; use warnings;
启动您的程序 - 这将捕获最常见的错误并使调试更加更容易!open(my $fh, '<', $file_name) or die "Failed to open $file_name: $!"
)my $line = <$fh>;
)chomp
删除行结尾split
将行划分为字段(my @column = split /,/, $line;
)$column[1]
和$column[2]
而不是2
和{{ 1}})3
并递减计数器但请注意,您的样本所需输出与所描述的逻辑不匹配。根据指定的逻辑,输出应包括示例数据的前七行,但不包括最后一行(因为它前面的三行中没有一行包含“e01”)。
因此。获取此信息以及您可能已经了解的有关Perl的任何信息,并尝试编写解决方案。如果您达不到如何取得进一步进展的地步,请发布一个包含代码副本和输入数据的新问题(或更新此问题),以便我们自己运行,并说明如果它无法正常工作,那么我们将能够更有能力帮助您处理这些信息(如果您能证明您已经努力首先自己完成这项工作,那么更多的人愿意提供帮助。)