所以我有这个文件,它有超过480000行和1380列。
如果第二行中的值是Sex:Female或Sex:Male,我需要一个将F_或M_添加到第一行中的值的管道。

我文件的第一行基本上是单个ID,后跟单元格类型-N或-G。第二行指示该个人是女性还是男性,其余各行在第一列中是probe_Id,其他列是每个人对应的beta_value。如果这样更有意义,我将添加以下几行。

我的输入文件是这样的(制表符分隔),没有第一列。

1740-N  1546-N  1546-G  1740-G  1228-G  5121-N  5121-G
Sex: Female Sex: Female Sex: Female Sex: Female Sex: Male   Sex: Female Sex: Female

我的输出应该看起来像这样(制表符分隔),没有第一列
F_1740-N    F_1546-N    F_1546-G    F_1740-G    M_1228-G    F_5121-N    F_5121-G

注意不输出性别线。

有人可以帮忙吗?如果列数较少,我会手动执行。

这可以在任何程序中完成;我不坚持Perl

最佳答案

$ awk -F'\t' '
NR%2 { split($0,a); next }
{
    for (i=1;i<=NF;i++)
        printf "%s%s_%s", (i==1?"":FS), ($i~/Female/?"F":"M"), a[i]
    print ""
}
' file
F_1740-N        F_1546-N        F_1546-G        F_1740-G        M_1228-G       F_5121-N F_5121-G

关于perl - Perl,根据第二行中的值更改第一行中的值,,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20008395/

10-10 17:43