라인 n이 조건을 충족하면 라인 n-1(및 n)을 인쇄합니다.

라인 n이 조건을 충족하면 라인 n-1(및 n)을 인쇄합니다.

다음과 같은 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

보간되지 않은 변수 콘텐츠를 원합니다.

관련 정보