我有一个看起来像的文件:
SNP Al1 Al2 Freq1 MAF AvgCall Rsq Genotyped LooRsq EmpR EmpRsq Dose1 Dose2
20:60479 C C 1.00000 0.00000 1.00000 0.00000 - - - - - -
20:60522:T_TC R R 1.00000 0.00000 1.00000 0.00000 - - - - - -
20:60571 C C 1.00000 0.00000 1.00000 0.00000 - - - - - -
20:60795 G C 0.99627 0.00373 0.99627 0.02668 - - - - - -
....
我想更改看起来像
的条目20:60522:T_TC R R 1.00000
采用与其余行相同的格式,即
20:60522 R R 1.00000
我试图通过拆分字符串,更改有问题的部分,然后将其添加到行并打印行来以python的方式进行。我该怎么做?
到目前为止,这是我尝试过的很多事情之一:
perl -wnl -e '@lines = split $_; print lines[0]' testrun
从行创建数组,然后获取第一个条目(也就是说,我还无法捕获我想要修改的部分。)
问题是这会返回
print() on unopened filehandle lines at -e line 1, <> line 1. etc
聚苯乙烯。将放弃任何解决我的问题的解决方案。我知道有些解决方案可以使用类似sed的模式更改字符串,但我无法让它们工作。
答案 0 :(得分:4)
这将用冒号替换冒号后跟字母和下划线:
perl -wpe 's/:[a-zA-z_]+/ /' testrun
这是我的输出:
SNP Al1 Al2 Freq1 MAF AvgCall Rsq Genotyped LooRsq EmpR EmpRsq Dose1 Dose2
20:60479 C C 1.00000 0.00000 1.00000 0.00000 - - - - - -
20:60522 R R 1.00000 0.00000 1.00000 0.00000 - - - - - -
20:60571 C C 1.00000 0.00000 1.00000 0.00000 - - - - - -
20:60795 G C 0.99627 0.00373 0.99627 0.02668 - - - - - -
答案 1 :(得分:2)
错误来自于打印$
时遗失$lines[0]
。
此外,split $_
相当于split $_, $_
,它不会给你任何东西。相反,允许split
采用默认参数(相当于split ' ', $_
):
perl -wnl -e '@lines = split; print $lines[0]' testrun
您还可以利用-a
flag自动将每一行拆分为数组@F
:
perl -wnla -e 'print $F[0]' testrun
然后你可以操纵$F[0]
并用剩下的行打印出新值:
perl -wnla -e '$F[0] =~ s/:\D+$//; print join "\t", @F;' testrun