2番目の下線の後のすべての内容を削除し、他の列はどのように維持しますか?

2番目の下線の後のすべての内容を削除し、他の列はどのように維持しますか?

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

最初の列の2番目の下線以降のすべての内容を削除しようとしているので、

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

最初の列の2番目の下線の後にあるすべての項目を削除するように要求するのは、最初の列のインスタンスが次のようになる可能性があるためです。 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

2番目の列も返されるように、このコマンドをどのように実行しますか?

ありがとう

答え1

デフォルトのフィールド区切り文字を変更せずにそのままにして使用するアッ~の分かれる()最初のフィールドの機能です。

$ 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

関連情報