perl - 仅当以 Perl 中的给定字符串开头时,才将一行从一个文件写入另一个文件
问题描述
我想用 Perl 编写一个程序,逐行读取文件并将这些行写入另一个文件。输入文件具有集合中的数据(类似于一组行,其中一行以 START 开头,另一行以 END 开头)。从,开始到结束,它是一个集合。每组中的行数可能会变化,也可能不会变化。
我想将每个集合写入不同的文件(file_1.txt、file_2.txt 等)
示例:输入文件:
START123
DET1
DET2
END123
START123
DET1
DET2
DET3
END123
为此,我希望为每组创建 2 个文件。
注意:输入文件中有 940,000 行。大约100,000套。
编辑:
确切地。下面是创建唯一文件,但不写入文件。我在这里想念什么?
use strict;
use warnings;
# Open Input file
open my $fh_i, "<", "input.txt" or die $!;
# Flag to check if we are inside the block
my $in_block = 0;
my $counter = 0; #Dynamic Filenaming for each Set
my $filename = "output_1.txt"; #Initial filename
# Read line by line into default variable ($_)
while( <$fh_i> ) {
$in_block = 0 if /^END/;
# Print to target file if we are inside the block
open (my $fh_o, ">", $filename) or die $!;
print $fh_o $_ if $in_block;
close $fh_o if /^START/;
$in_block = 1 if /^START/;
$counter = $counter + 1 if /^START/;
$filename = "output_".$counter.'.txt' if /^START/;
}
close $fh_i;
解决方案
当与 match 运算符一起使用时,该..
运算符提供类似于块匹配的状态,如下所示:
while (<>) {
If (/^START/ .. /^END/) {
# Inside block
推荐阅读
- arrays - 在数组中存储 300 个字符串?
- python - 有什么方法可以在 App 引擎上与我的 Flask 网页一起运行脚本?
- r - 在 R Studio 的数据框中交换数据点
- android - Docusign - 无法从 android 信封中获取签名图像
- html - ID 工作时 CSS 类不可格式化
- python - 是否有更有效的方法来创建映射到按集合整数移动的字母的字母字典?
- r - 使用应用函数族对 List 中的行进行子集
- node.js - 用于测试 APQ(自动持久查询)的示例 Apollo 客户端代码
- android - launchFragmentInContainer 无法解析 Activity 的意图
- mediawiki - 如何将自动完成属性添加到 MediaWiki 登录表单的输入字段?