Perl查找字符并在查找文本后添加第二行
我正在尝试让这个脚本在两个find字符串中工作。我在获取文件以导出所需格式时遇到问题Perl查找字符并在查找文本后添加第二行,perl,Perl,我正在尝试让这个脚本在两个find字符串中工作。我在获取文件以导出所需格式时遇到问题 use strict; my $find = '^(H0|HT)'; open (NEW, ">", "output.txt" ) or die "could not open:$!"; open (FILE, "<", "input.txt") or die "could not open:$!"; while (<FILE>) { chomp; if (/^\h{39
use strict;
my $find = '^(H0|HT)';
open (NEW, ">", "output.txt" ) or die "could not open:$!";
open (FILE, "<", "input.txt") or die "could not open:$!";
while (<FILE>) {
chomp;
if (/^\h{39}\XX187/){
print NEW join(",","$_\n");
}
if (/$find/){
print NEW join(",","$_")
}
}
close (FILE);
close (NEW);
输出文件期望值:
HT12345678 TEST, TESTNAME 01/01/16 XX187 CLAIM PROCESSED 01/01/16
你的问题很不精确,我很难理解你到底需要什么。然而,这个简短的程序可能会有所帮助
use strict;
use warnings 'all';
while ( <DATA> ) {
print if /^(?:H[0T]|\s+XX187\b)/;
}
__DATA__
Account Patient Name Date
--------------------------------------------------------------------------------------------
HT12345678 TEST,TESTNAME 01/01/16
XX187 CLAIM PROCESSED 01/01/16
这就是您正在运行的实际代码吗/^\h{39}\d/$find2/应该给出一个致命的语法错误。您的问题是什么?是的,我正在尝试找到XX187作为我的下一个添加行。我是否要添加其他内容,或者是否应该将其更改为我要查找的单词,例如/^\h{39}\d/XX187/??连接、$\n的作用是什么?您所需的输出中没有任何逗号,列表中只有一项,因此联接的结果仅为$\n您真的需要TEST、TESTNAME转换为TEST、TESTNAME吗?抱歉,由于报告中的个人信息,我对实际文件的详细信息非常有限。我要做的是复制以HT或H0开头的行,然后复制后面包含39个空格和单词XXX187的下一行,并将该行作为添加的行复制到包含HT或H0的行。希望这有点道理。@PhoenixJay:我的答案就是这样。如果我想利用$find,我该怎么写印刷品呢?打印if/^?:$find |\s+XX187\b/事实上,我是用$find使用它的。。非常感谢@Borodin
use strict;
use warnings 'all';
while ( <DATA> ) {
print if /^(?:H[0T]|\s+XX187\b)/;
}
__DATA__
Account Patient Name Date
--------------------------------------------------------------------------------------------
HT12345678 TEST,TESTNAME 01/01/16
XX187 CLAIM PROCESSED 01/01/16
HT12345678 TEST,TESTNAME 01/01/16
XX187 CLAIM PROCESSED 01/01/16