패턴 일치를 기반으로 줄과 후속 텍스트를 인쇄합니다.

패턴 일치를 기반으로 줄과 후속 텍스트를 인쇄합니다.

패턴과 일치하는 줄을 유지하기 위해 후속 줄의 패턴을 기반으로 텍스트 파일의 줄을 필터링하려고 합니다. 또한 패턴과 일치하는 파일의 이름을 바꿔야 합니다.

예를 들어:

>text chr1    
AAA  
BBA  
AAA  
>additional text chr2  
ABA  
AAA  
CCC  
TTT  
>some text chr3  
TTT  
CCC  
TCT  
>no good text 1 3  
AAA  
CCC  
TCT  
>unimportant text 2 3 3  
ACC  
CCC  
TCT  

이 명령은 ">"로 시작하는 줄에 "chr"이 포함되지 않을 때까지 "chr"을 포함하는 줄과 모든 후속 줄을 인쇄합니다.

>chr1  
AAA  
BBA  
AAA  
>chr2  
ABA  
AAA  
CCC  
TTT  
>chr3   
TTT  
CCC  
TCT  

답변1

저는 awk, grep, sed를 사용하여 이 작업을 수행합니다. 원본 파일에는 후행 공백이 없다고 가정합니다.

awk 'NR>1&&/>/{print ""}{printf " %s", $0}END{print ""}' file |grep chr|sed 's/^ //' |sed 's/^.*chr/>chr/' |awk 'BEGIN{OFS="\n";}{print $1,$2,$3,$4}'

먼저 청크는 ">"로 시작하고 각 필드 앞에는 공백이 있습니다.

 >text chr1 AAA BBA AAA
 >additional text chr2 ABA AAA CCC TTT
 >some text chr3 TTT CCC TCT
 >no good text 1 3 AAA CCC TCT
 >unimportant text 2 3 3 ACC CCC TCT

둘째, 하위 문자열 "chr"이 포함된 행을 필터링합니다.

 >text chr1 AAA BBA AAA
 >additional text chr2 ABA AAA CCC TTT
 >some text chr3 TTT CCC TCT

셋째, 모든 선행 공백을 제거합니다.

>text chr1 AAA BBA AAA
>additional text chr2 ABA AAA CCC TTT
>some text chr3 TTT CCC TCT

넷째, "">"와 "chr" 사이의 모든 문자를 제거합니다.

>chr1 AAA BBA AAA
>chr2 ABA AAA CCC TTT
>chr3 TTT CCC TCT

마지막으로 awk를 사용하여 출력 파일 구분 기호로 "\n"이 있는 모든 줄을 인쇄합니다.

>chr1
AAA
BBA
AAA
>chr2
ABA
AAA
CCC
>chr3
TTT
CCC
TCT

관련 정보