다음 형식의 큰 텍스트 DNA 서열 파일이 있습니다.
>name
AACTGGGCT
>로 시작하지 않는 줄은 변경하지 않고 그대로 두고 추가 정보와 특수 문자를 사용하여 현재 이름 줄을 구문 분석해야 합니다.
다음이 있습니다("D 3" 사이에 공백이 아니라 탭 문자임).
>GDRLR5L04EQY8D 3931|1166
GACAAACGCTGGCGGGTGCATGAG
생각하다:
>3931
GACAAACGCTGGCGGGTGCATGAG
첫 번째 부분을 제거 하려고 시도했지만 sed 's/\>*[[:blank:]]/>/g'
작동하지 않습니다. gawk
마지막에 파이프와 숫자를 제거 할 수 있나요 ?
답변1
사용 awk
:
awk -F'[| ]' '{if ( $1 ~ /^>/ ) print ">"$2; else print $0}' file
>3931
GACAAACGCTGGCGGGTGCATGAG
파이프 앞의 첫 번째 문자열 끝과 숫자 집합의 시작 사이의 공백이 a Tab대신 a 인 경우 Space필드 구분 기호를 설정하는 정규 표현식은 입니다 [|\t]
.
답변2
sed 솔루션:
sed '/^>/s/>.* \([0-9]*\)|.*/>\1/' < existing-file > new-file
이로 인해 그 뒤의 명령이 >로 시작하는 입력 행에서만 작동하게 되는데, 이는 수행할 수 있는지 /^>/
모르는 것 같습니다 .sed
답변3
다른 sed
:
$ sed -e 's/[^>].* \([0-9]*\)|.*/\1/' file
>3931
GACAAACGCTGGCGGGTGCATGAG
답변4
sed 's/>.* />/;s/|.*//
' <<\DATA
>GDRLR5L04EQY8D 3931|1166
GACAAACGCTGGCGGGTGCATGAG
DATA
산출
>3931
GACAAACGCTGGCGGGTGCATGAG