我的perl程序
open(my $inFileHandle, '<', '/home/Ram/Desktop/TCR/input_file_TCR_05_0.txt') or die " $!";
open(my $outFileHandle, '>', '/home/Ram/Desktop/TCR/input_file_TCR_05_0_ram.txt') or die " $!";
while (my $line = <$inFileHandle>)
{
$line =~s/05 +/,/g;
print $outFileHandle $line;
}
close $inFileHandle;
close $outFileHandle;`
我的程序的结果是
05,0,1–2,2,UN,praveen,kumar
05,0,3,1,UN, hari,krishna
05,0,4,1,UN,manju,nath
05,0,5–20,16,UN,sateesh,kumar
但我想要像
一样05,0,1–2,2,UN,praveen kumar
05,0,3,1,UN, hari krishna
05,0,4,1,UN,manju nath
05,0,5–20,16,UN,sateesh kumar
请告诉我实现输出需要哪些更改。你的建议很明显
答案 0 :(得分:1)
我猜你的实际程序不是s/05 +/,/
而是s/ /,/
或s/ +/,/
。
如果您只想将某些空格更改为,
,则正则表达式替换并不理想;我会改为:
while (my $line = <$inFileHandle>)
{
print join ',', split / /, $line, 6;
}
答案 1 :(得分:0)
不知道你的程序的输入是什么,但我正在考虑你现在收到的输出作为输入(如果sed
可以接受的话,那就是你可以接受的)
$ cat test
05,0,1–2,2,UN,praveen,kumar
05,0,3,1,UN, hari,krishna
05,0,4,1,UN,manju,nath
05,0,5–20,16,UN,sateesh,kumar
$ sed -r 's/(.*),(.*)$/\1 \2/' test
05,0,1–2,2,UN,praveen kumar
05,0,3,1,UN, hari krishna
05,0,4,1,UN,manju nath
05,0,5–20,16,UN,sateesh kumar
答案 2 :(得分:0)
您可以使用稍微复杂的正则表达式来匹配firstname / lastname对,并在它之前的所有内容上运行替换,然后连接结果以进行打印。
#!/usr/bin/perl
while (<>){
chomp;
if (/(.*?\s+)(\S+\s+\S+)$/){
($a,$b)=($1,$2);
$a =~ s/\s+/,/g;
$_ = $a.$b;
}
print $_."\n";
}