일부 정크를 제거하고 단어를 다음 문자열로 시작하는 주요 번호로 바꾸려고 합니다.
>ref|NC_035781.1|
>ref|NC_035782.1|
>ref|NC_035783.1|
>ref|NC_035784.1|
다음으로 끝내고 싶습니다.
>NC_035781.1
>NC_035782.1
>NC_035783.1
>NC_035784.1
나는 노력했다
sed 's/\>ref\|NC_03578\([0-9]\)\.1\|/>NC_03578\1\.1/g' chr.test | grep '>NC_'
테스트한 결과 다음과 같이 예상보다 많은 결과를 얻었습니다.
>NC_03578.1>>NC_03578.1r>NC_03578.1e>NC_03578.1f>NC_03578.1|>NC_035780.1|>NC_03578.1 >NC_03578.1C>NC_03578.1r>NC_03578.1a>NC_03578.1s>NC_03578.1s>NC_03578.1o>NC_03578.1s>NC_03578.1t>NC_03578.1r>NC_03578.1e>NC_03578.1a>NC_03578.1
...
내가 뭘 잘못했나요?
답변1
주요 문제는 당신이 탈출했고 >
이 경우 단어 경계 끝으로 작동하고 대체 연산자로 작동 |
할 .GNU sed
\>
\|
$ sed 's/>ref|\(NC_03578[0-9]\.1\)|.*/>\1/' chr.test
>NC_035781.1
>NC_035782.1
>NC_035783.1
>NC_035784.1
수정된 명령은 위에 표시됩니다. 그리고 줄 끝에 공백이 좀 있는 것 같아서 추가해서 .*
없애봤습니다. 작업 sed -n '/NC_/ s/>ref|\(NC_03578[0-9]\.1\)|.*/>\1/p'
자체 를 래핑하는 데 사용됩니다 grep
.sed
당신은 또한 사용할 수 있습니다awk
$ awk -F'|' '/NC_/{print ">" $2}' chr.test
>NC_035781.1
>NC_035782.1
>NC_035783.1
>NC_035784.1
-F'|'
|
필드 구분 기호로 정의됩니다 .|
정규식 연산자이지만FS
필드 구분 기호(특수 awk 변수로 설정 )가 단일 문자인 경우-F
정규식으로 간주되지 않습니다 .-F'[|]'
아니면-F'\\|'
작동할 수도 있지만 효율성이 떨어집니다./NC_/
입력 라인에 다음이 포함된 경우NC_
print ">" $2
>
문자 및 두 번째 필드 인쇄