Perl,根据第二行中的值更改第一行中的值,

标签 perl shell unix sed awk

所以我的这个文件有超过 480000 行和 1380 列。 如果第二行中的值是性别:女性或性别:男性,我需要一个将 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,根据第二行中的值更改第一行中的值,,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20008395/

相关文章:

变量名中的 perl 变量替换

linux - 将 git 命令与 -q 一起使用,但在失败时不会保持安静?

shell - unix中两个变量相减

linux - "ls"是否有限制文件名字符的选项?

c - 如果 child 用 exec() 覆盖图像, parent 和 child 是否仍然共享信号控制?

perl - 如何使用仅在运行时已知的 Perl 包?

perl - 如何在 Perl 中使用 Bless 运算符?

perl - 制作散列的散列

linux - 我应该把函数放在哪里,以便在非交互式 ssh session 期间获取它们?

linux - 使用 sed 删除最后一个换行符