for 루프와 grep을 동시에 사용하려고 하면 공백에 약간의 문제가 있는 것 같습니다. 예를 들어 "k117_196509"가 아닌 "k117_19650"을 일치시키려고 하기 때문에 공백이 중요합니다. 도움을 주시면 대단히 감사하겠습니다!
for i in 'k117_19650 ' 'k117_460555 ';do
grep -A1 $i final.contigs.fa >> gene.fa
done
답변1
직면하고 있는 문제는 쉘 변수 사용과 관련이 있습니다. 특히 공백 등 "비표준" 문자가 포함된 변수를 사용할 경우,항상 변수를 인용하세요.이를 사용할 때 여기에서 토론을 참조하십시오.
- bash/POSIX 쉘에서 변수를 인용하는 것을 잊어버리는 보안 위험
- 공백이나 기타 특수 문자 때문에 쉘 스크립트가 멈추는 이유는 무엇입니까? (이 두 가지는 Stéphane Chazelas의 제안을 기반으로 합니다)
- 스택 오버플로 시또는여기.
귀하의 경우:
grep -A1 -- "$i" final.contigs.fa >> gene.fa
트릭을 수행해야 합니다( 로 시작하는 값을 --
방지하려면 여기에 하나를 추가하세요 ).$i
-
답변2
이렇게 구분하려면('k117_19650'과 일치하지만 'k117_196509'와 일치하지 않음) which를 사용하여 하위 문자열 대신 전체 단어를 검색하도록 할 수 -w
있습니다 grep
.
for i in k117_19650 k117_460555 ;do
grep -w -A1 "$i" final.contigs.fa >> gene.fa
done