我有一个文件,某些行有4个字段,有些行有3个字段,看起来像:
Chart.Line(Series1) |> Chart.Show // Chart 1
// do some work
Chart.Line(Series2) |> Chart.Show // display this in a second window
// continue executing the rest while the above windows are still open.
在行有3个字段的情况下,第二个字段匹配“number.longer number”,而如果行有4个字段,则第二个字段匹配“rsnumber”。在行有3个字段的情况下,我想在第三列中添加一个字段,该字段包含一个等于第二个字段的数字,用“。”分隔。例如,生成的文件如下所示:
1 rs17125090 63988904 ENSG00000142856
7 7.87455705 ENSG00000075303
我的perl one liner是:
1 rs17125090 63988904 ENSG00000142856
7 7.87455705 87455705 ENSG00000075303
但我得到一个空文件。有人可以解决这个问题/让我知道出了什么问题吗?
答案 0 :(得分:1)
编写单行程序时需要非常小心。许多正常的保护措施都没有到位,而且当没有布局时发现错误要容易得多
您的代码等同于此程序
for ( `cat file` ) {
my @L = split;
if ( $L[1] =~ m/^\d+\.\d+$/ ) {
my @snp = split( /\./, $L[1] );
splice( @L, 2, 0, $snp[1] );
}
}
open OUT, ">file.new";
print OUT "@L\n";
close OUT;
你现在能看到问题所在吗?
这应该做你需要的事情
perl -anE 'splice @F, 2, 0, $F[1] =~ /\.(\d+)/; say "@F";' myfile