"#" 또는 "chr1"로 시작하는 줄을 추출하는 방법

"#" 또는 "chr1"로 시작하는 줄을 추출하는 방법

다음과 같은 파일이 있습니다.

##Comment A
##Comment B
#Important header
chr1 content a
chr2 content b
chrX content x

#(## 아님) 또는 "chr1"로 시작하는 새 파일에 3행과 4행을 추출하고 싶습니다.

#Important header
chr1 content a

나는 ~하려고 노력한다

grep "^[^##]"

그러나 이렇게 하면 #이 하나만 있는 줄도 제외됩니다. 나는 항상 두 단계로 이를 수행할 수 있다고 생각하지만 더 나은 솔루션을 원합니다! 매우 감사합니다.

답변1

두 패턴을 OR로 연결하는 것은 어떻습니까?

$ grep '^#[^#]\|^chr1' file
#Important header
chr1 content a

또는 ( -e형식으로POSIX에 의해 지정됨)

$ grep -e '^#[^#]' -e '^chr1' file
#Important header
chr1 content a

답변2

항상 다른 해결책이 있습니다. awk다음 스크립트를 통해 이를 수행할 수 있습니다 .

awk '{if( ($0~/^#/ && $0!~/^##/) || $0~/^chr1/){print $0}}' file

#첫 번째 부분은 로 시작하지만 그렇지 않은 경우 줄을 찾고, ##두 번째 부분은 로 시작하는 줄을 가져온 chr1다음 결과를 인쇄합니다.

관련 정보