다음과 같은 fasta 파일이 있습니다.
>19 dna:chromosome chromosome:NCBIM37:19:1:61342430:1 37330562 ID13406 U -
TACATGGGTGACAAGGAGGTCAGGTGTTA
>19 dna:chromosome chromosome:NCBIM37:19:1:61342430:1 37330584 ID57999 U -
TGTCAAAGGAAGCCTTACTATACATGG
">"로 시작하는 행은 헤더이고 다른 행은 데이터입니다.
26보다 짧거나 31보다 긴 헤더가 아닌 줄을 모두 제거하고 싶습니다. 또한 이 행(예: 이전 행)에 속하는 헤더를 제거하고 싶습니다.
지금까지 내 코드
awk '
{if (substr($0,1,1) == ">")
{header=$0}
else
{if ((length($0) > 25) && (length($0) < 32)) {print $header "\n" $0}}}' *
하지만 이것은 나에게 오류 메시지를 제공합니다
awk '{if (substr($0,1,1) == ">") {header=$0} else {if ((length($0) > 25) && (length($0) < 32)) {print $header $0}}}' *
), name "header"ld $(>19 dna:chromosome chromosome:NCBIM37:19:1:61342430:1 37330562 ID13406 U -
input record number 2, file Cluster_1.fas
source line number 1
답변1
이 문제를 해결하는 것이 더 쉬운 것 같습니다 sed
.
sed '/^>/{N;/\n.\{26,31\}$/!d}'
작은 설명:
/^>/
헤더와 문자열 일치
{}
패턴에 명령 그룹 적용
N
패턴에 다음 줄 추가
/\n.\{26,31\}$/
기호 개수가 26..31 사이인지 확인합니다.
!d
일치하면 통과하고 그렇지 않으면 삭제합니다.
답변2
당신의 문제는 당신이 말한 것입니다 :
print $header
..바꾸다:
print header
보간되지 않은 변수 콘텐츠를 원합니다.