我有一个包含以下数据(4行和4列)的文件
1 0.126082656 0.118439349 0.129554726
+1 0.129733599 0.128425124 0.127376228
+1 0.136149406 0.122109378 0.134386804
1 0.1077886 0.108754544 0.112025117
现在我需要将1:追加到col2,2:到col3 3:到col4,依此类推到最后一列,这样数据就像
1 1:0.126082656 2:0.118439349 3:0.129554726
+1 1:0.129733599 2:0.128425124 3:0.127376228
.
.
我尝试使用以下代码,但我无法进行增量
#!/usr/bin/perl
use strict;
use warnings;
open(my $inp, "<train.train") or die $!;
my @amu = <$inp>;
close ($inp);
foreach my $line(@amu)
{
if ($line =~ s/(\d+\.\d+)/1:$1/g)
{
print $line;
print "\n";
}
}
请纠正我以适应所需的解决方案。
答案 0 :(得分:0)
您可以尝试此替换
$line =~ s/(\d+\.\d+)/\1:1/g
更新答案:
open(my $inp, "< FileName") or die $!;
my $val;
my @amu = <$inp>;
close ($inp);
foreach my $line(@amu)
{
$val=0;
if ($line =~ s/(\d+\.\d+)/++$val != 0 ? "$val:$1:1" : ""/eg)
{
print $line;
}
}
输出
1 1:0.126082656:1 2:0.118439349:1 3:0.129554726:1
+1 1:0.129733599:1 2:0.128425124:1 3:0.127376228:1
+1 1:0.136149406:1 2:0.122109378:1 3:0.134386804:1
1 1:0.1077886:1 2:0.108754544:1 3:0.112025117:1
答案 1 :(得分:0)
答案 2 :(得分:0)
这是一种方法:
while(<DATA>) {
my $i = 1;
s/(\s)(\d)/"$1" . $i++ . ":$2"/eg;
print;
}
__DATA__
1 0.126082656 0.118439349 0.129554726
+1 0.129733599 0.128425124 0.127376228
+1 0.136149406 0.122109378 0.134386804
1 0.1077886 0.108754544 0.112025117
<强>输出:强>
1 1:0.126082656 2:0.118439349 3:0.129554726
+1 1:0.129733599 2:0.128425124 3:0.127376228
+1 1:0.136149406 2:0.122109378 3:0.134386804
1 1:0.1077886 2:0.108754544 3:0.112025117
答案 3 :(得分:0)
我可能在没有脚本但在命令行上执行此操作:
perl -pe "$q=1;s/(\s)(\S)/$1 . $q++ . ':' . $2/ge" your_file.txt