대시로 연결된 유전자 이름을 분리하고 싶습니다. 태그로 바꾸고 싶습니다.
내 입력 파일은 다음과 같습니다
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