Awk

如何刪除第二個下劃線後的所有內容但保留其他列?

  • July 16, 2019

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

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

謝謝

試試這個,

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

保持主欄位分隔符不變,並在第一個欄位上使用awk的*split()*函式。

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

引用自:https://unix.stackexchange.com/questions/530294