문자로 시작하는 줄과 그 뒤의 줄만 유지하는 방법

문자로 시작하는 줄과 그 뒤의 줄만 유지하는 방법

>잘못된 헤더(예: 누락 )가 있는 일부 시퀀스와 양호한 헤더가 있는 일부 시퀀스를 의도적으로 포함하는 FASTA 파일이 있습니다 . 파일의 형식은 한 줄에 뉴클레오티드 서열이 포함되어 있습니다.

예:

2865958
AACTACTACAG
>hCoV-19/2832832
ACTCGGGGGG
28328332
ATTCCCCG
>hCoV-19/2789877
ACTCGGCCC

>다음과 같이 올바른 헤더(예: 로 시작하는 줄) 가 있는 시퀀스만 유지하고 싶습니다 .

>hCoV-19/2832832
ACTCGGGGGG
>hCoV-19/2789877
ACTCGGCCC

다양한 방법(sed, grep, awk)을 시도했지만 올바른 결과가 없었습니다.

awk '/^>/ { ok=index($0,"hCoV")!=0;} {if(ok) print;}' combined_v4.fa > combined_v5.fa

sed -n '/^>.*hCoV/,/^>/ {/^>.*hCoV/p ; /^>/! p}' combined_v4.fa > combined_v5.fa

grep -w ">" -A 1 combined_v4.fa > combined_v5.fa

무엇을 해야할지 아시나요?

답변1

Tell은 grep또한 로 시작하는 줄을 찾고 >다음 줄을 포함합니다.

grep -A1 --no-group-separator '^>' combined_v4.fa > combined_v5.fa

grep귀하의 버전이 이를 지원하지 않는 경우 --no-group-separator다음을 시도해 보십시오.

grep -A1 '^>' combined_v4.fa | grep -v '^--$' > combined_v5.fa

답변2

sed의 한 가지 방법은 다음과 같습니다.

sed -n '/^>/!d;N;p' file

입력의 마지막 줄이 ">"로 시작하면 인쇄되지 않습니다.

awk를 사용하세요:

awk 'prev {print prev ORS $0; prev=""} /^>/ {prev=$0}' file

이 두 줄을 인쇄하려면 ">" 다음 줄까지 기다리세요. 정규식 외에도 다음을 index()사용할 수도 있습니다.

awk 'prev {print prev ORS $0; prev=""} index($0,">")==1 {prev=$0}' file

^>">"로 시작하는 문자열과 일치하는 정규식입니다. 문자열 "">"의 시작 위치를 반환합니다. 레코드가 this로 시작하는 경우 index($0,">")이 위치는 1( )과 같아야 합니다 ....==1

"hCoV"도 있는지 확인하려면:

sed -n '/^>/!d;/hCoV/!d;N;p' file
awk 'prev {print prev ORS $0; prev=""} /^>/ && /hCoV/ {prev=$0}' file

답변3

awk를 사용하면 다음과 같이 할 수 있습니다.

awk '/^>/ {c=2} c-- > 0' file

>보이면 2줄을 인쇄하세요.

답변4

당신은 awk시도 할 수 있습니다:

awk 'f {print; f=0} /^>/ {print;f=1}' file
>hCoV-19/2832832
ACTCGGGGGG
>hCoV-19/2789877
ACTCGGCCC

  • 이 훌륭한 기사는 다음과 같은 도움이 될 수 있습니다.

"일치하는 패턴을 따르는 줄을 인쇄하려면 sed 또는 awk를 사용하십시오.":https://stackoverflow.com/questions/17908555/printing-with-sed-or-awk-a-line-following-a-matching-pattern

관련 정보