파일을 부분 집합으로 나누어 올바른 염색체를 얻습니다.

파일을 부분 집합으로 나누어 올바른 염색체를 얻습니다.

다음과 같은 내용이 포함된 입력 파일이 있습니다.

chr1    12227   12612
chr1_ett    12721   13220
chr1    14829   14969
chr2    15038   15795
chr2_tdr    15947   16606
chr1    16765   16857
chr1    17055   17232
chr1    17368   17605
chr3    17742   17914
chr3_urr    18061   18267

"_"첫 번째 열에 (밑줄)이 있는 행을 삭제하고 싶습니다 . 따라서 기본적으로 chr1, chr2, chr3만 유지되고, chr1_ chr2_ chr3_ 등의 염색체는 chr1부터 chr22까지 유지되지 않고, chrX, chrY, chrM도 유지된다.

나는 무엇을 해야 합니까?

감사해요

답변1

노력하다

awk '$1 !~ /_/' input_file.txt > output.txt

$1(첫 번째 열)에 포함되지 않은 모든 행이 선택됩니다._

또는 Glenn Jackman이 제안한대로

awk '! index($1,"_") ' input_file.txt > output.txt

또 다른 방법은

sed -i -e '/^chr[0-9]*_/d' file.txt

그러면 동일한 행이 삭제됩니다. (행이 정확히 로 시작하는 경우 chr)

답변2

sed '/_/d' file

밑줄이 나타나는 모든 줄을 삭제합니다대기열의 어느 곳에서나.

결과를 다시 파일에 저장해야 하는 경우 다음을 사용하세요.sed -i ...


첫 번째 열로 제한합니다.

sed '/^[[:blank:]]*[^[:blank:]]\+_/d' file

즉, 줄 시작 부분에 선택적으로 선행 공백을 사용할 수 있고 그 뒤에 공백이 아닌 문자와 밑줄이 올 수 있습니다.

답변3

펄 솔루션:

perl -ane 'print unless $F[0] =~ /_/' < input > output

답변4

또는 다음을 사용하여 grep:

grep -v "_" file

-v, --invert-match일치하지 않는 행을 선택하려면 일치의 의미를 반대로 합니다.

첫 번째 열에 "_"만 있는 경우 행을 삭제합니다.

grep -v "^chr[0-9]_" file

관련 정보