我有一个Perl程序,它根据正则表达式匹配捕获输入文件的第一行和第二行。
在我的输入文件中,在我需要的细节中有标题分隔符,它没有捕获我想要的行,所以细节的第二行不在那里。
有没有可能修改我的程序,使其能够根据空格或第二行的位置捕获正确的细节行?
如果发生这种情况,则头分割和第二行始终在整个文件的相同位置。
下面是我目前为止的脚本,但是正如我提到的,当第二行在细节中有一个标题分割时,它不能捕获我想要的第二行。
use strict;
my $find = '^(J0|JT)';
my $match = 0;
open( NEW, ">", "output.txt" ) or die "could not open:$!";
open( FILE, "<", "combined.txt" ) or die "could not open:$!";
while (<FILE>) {
chomp;
if ($match) {
$match = 0;
print NEW "$_\n";
}
if (/$find/) {
$match = 1;
print NEW "$_";
}
}
close(FILE);
close(NEW);
combined.txt
---------------------------------------------------------------------------------
JT00000000 DOE, JANE 01/23/16 J00000000 1 01/27/16
U# NUMBER UNIT # FAIL
---------------------------------------------------------------------------------
JT00000000 DOE, JOHN 01/24/16 J00000000 1 01/28/16
CLAIM DETAIL
PATIENT ADM/SER DIS DATE UNIT # NUM BILL DATE
CHECKS DESCRIPTION VALUE (FIRST)
TOB AFTER UNIT # FAIL
----------------------------------------------------------------------------------
J000000000 DOE, JOHN 01/25/16 01/31/16 J00000000 1 01/29/16
TXN MISS UNIT # FAIL
output.txt(必填)
JT00000000 DOE, JANE 01/23/16 J00000000 1 01/27/16 U# NUMBER UNIT # FAIL
JT00000000 DOE, JOHN 01/24/16 J00000000 1 01/28/16 TOB AFTER FAIL
J000000000 DOE, JOHN 01/25/16 01/31/16 J00000000 1 01/29/16 TXN MISS FAIL
2条答案
按热度按时间toiithl61#
这将仅打印标题分隔符之间的第一行和最后一行。它保留所有行的缓冲区,直到下一个中断。请注意,我在结尾添加了一个标题中断。
bfnvny8b2#
我会写这个。它只是跳过不是以
J0
或JT
开头的每一行,否则它将打印当前行并读取和打印下一行编写一个从STDIN读取并写入STDOUT的程序几乎总是更简单。这样你就可以通过运行
将输出打印到您的控制台,或
如果你想把结果写入
output.txt
就像你原来的程序一样输出