패턴과 일치하는 줄을 유지하기 위해 후속 줄의 패턴을 기반으로 텍스트 파일의 줄을 필터링하려고 합니다. 또한 패턴과 일치하는 파일의 이름을 바꿔야 합니다.
예를 들어:
>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