>
잘못된 헤더(예: 누락 )가 있는 일부 시퀀스와 양호한 헤더가 있는 일부 시퀀스를 의도적으로 포함하는 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