두 번째 밑줄 뒤의 모든 내용을 제거하고 다른 열은 어떻게 유지합니까?

두 번째 밑줄 뒤의 모든 내용을 제거하고 다른 열은 어떻게 유지합니까?

내 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 <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

관련 정보