【问题标题】:command line perl: split string to modify first part命令行 perl:拆分字符串以修改第一部分
【发布时间】:2013-10-30 15:18:57
【问题描述】:

我有一个看起来像这样的文件:

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 的模式更改字符串,但我无法让它们工作。

【问题讨论】:

    标签: perl command-line


    【解决方案1】:

    这用空格替换冒号,后跟字母和下划线:

    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 -   -   -   -   -   -
    

    【讨论】:

      【解决方案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
      

      【讨论】:

        猜你喜欢
        • 2010-11-23
        • 1970-01-01
        • 2013-07-07
        • 1970-01-01
        • 1970-01-01
        • 2015-06-18
        • 1970-01-01
        • 2017-12-15
        • 2020-07-18
        相关资源
        最近更新 更多