밑줄로 연결된 유전자 이름을 어떻게 구분하나요?

밑줄로 연결된 유전자 이름을 어떻게 구분하나요?

대시로 연결된 유전자 이름을 분리하고 싶습니다. 태그로 바꾸고 싶습니다.

내 입력 파일은 다음과 같습니다

Cedr3g0570.1_XP_019283.1
Cedr4g7930.2_XP_019241.1
Cedr5g005170.1_C0LGS3.1
Cedr7g0290.5_XP_01921.1
CT35v5_contig_2082_1.6_XP_0272.1
CT35v5_Cedr2g060.1_GAU97.1
CT7New_004.1_XP_01996.1

그러나 나는 다음과 같은 결과를 원합니다.

Cedr3g0570.1            XP_019283.1
Cedr4g7930.2            XP_019241.1
Cedr5g005170.1          C0LGS3.1
Cedr7g0290.5            XP_01921.1
CT35v5_contig_2082_1.6  XP_0272.1
CT35v5_Cedr2g060.1      GAU97.1
CT7New_004.1            XP_01996.1

문제는 CT35v5_contig_2082_1.6과 같이 이름에 대시가 있는 유전자가 있기 때문에 첫 번째 대시를 간단히 바꿀 수 없다는 것입니다. 사용해 보았지만 sed 's/_/\t/'CT35v5_contig_2082_1.6과 같은 일부 유전자에서는 작동하지 않습니다.

답변1

sed 's/\(\.[0-9]\)\(_\)/\1 /' inputfile | column -t

정규식이 /\.[0-9]_/귀하의 경우와 일치하는 것 같아서 괄호를 사용하여 두 개의 역참조 그룹으로 나누고 첫 번째 그룹과 일부 공백을 인쇄하여 열을 분리한 다음 사용할 수 있습니다 column -t.

답변2

바꾸려는 밑줄은 항상 점 .다음에 숫자가 오는 것 같습니다 [0-9].

sed 's|\.\([0-9]\)_|.\1\t|'

그러면 텍스트 포인트와 숫자가 차례로 검색되며 , 그 뒤에 밑줄이 오는 \.그룹에 저장됩니다 . 이를 포인트, 저장한 첫 번째 그룹 및 탭 으로 바꿉니다 .\([0-9]\)_\1\t

관련 정보