如何删除第二个下划线之后的所有内容但保留其他列?

如何删除第二个下划线之后的所有内容但保留其他列?

我的 file.txt 看起来像这样

variant_id pval_nominal
1_752721_A_G_b37 2.23485e-05
1_900397_C_T_b37 3.04603e-05
1_928297_G_A_b37 2.12455e-05

我试图删除第一列中第二个下划线之后的所有内容,使其看起来像这样:

variant_id pval_nominal
1_752721 2.23485e-05
1_900397 3.04603e-05
1_928297 2.12455e-05

我要求删除第一列中第二个下划线之后的所有内容的原因是第一列中的实例可能如下所示:1_1025672_GCA_G_b37

我试图使用这个命令:

 awk -F _ '{print $1 (NF>1? FS $2 : "")}'  file.txt > file2.txt

但 file2.txt 看起来像这样:

variant_id pval
1_752721
1_900397
1_928297

如何运行此命令以便也返回第二列?

谢谢

答案1

保留主字段分隔符不变并使用awk分裂()第一个字段上的函数。

$ awk <data '{ split($1,f1,/_/) ; printf("%s_%s %s\n",f1[1],f1[2],$2) }'

答案2

尝试这个,

sed 's/_[A-Z].* / /g' file

variant_id pval_nominal
1_752721 2.23485e-05
1_900397 3.04603e-05
1_928297 2.12455e-05

相关内容