다음과 같은 내용이 포함된 입력 파일이 있습니다.
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