以下のような大きなファイルがあります。
chr10 98072 1
chr10 98073 1
chr10 98074 1
chr10 98075 2
chr10 98076 2
chr10 98077 3
chr10 98078 5
chr10 98079 5
chr11 98080 5
chr12 98081 5
各染色体には多くの項目があります。 chr10を含む行だけを抽出したいと思います。私のファイルが大きいので、このコマンドを使用してchr10行だけを抽出します。
awk '$1 ~ /^chr10$/{print}; $1 !~ /^chr10$/{exit}' cov.txt > subset.txt
awkがファイル全体を繰り返さないようにする良い方法ですか?私のファイルは染色体に従ってソートされました。
ありがとう
ベストアンサー1
awk '$1=="chr10"{print; next}{exit}' cov.txt > subset.txt
テスト:/dev/null
次へリダイレクト12,947,909 chr10
レコードに加えて、いくつかのレコードをchr11
追加chr12
99,063,774行 - 出力はすべて同じです(同じmd5sum)。出力ライン数=12,947,909- 最も速いものから最も遅いものまで並べ替え:
スティーブ:awk '{ if($1 == "chr10") { print } else { exit } }' cov.txt >/dev/null
real 0m5.963s
user 0m5.896s
sys 0m0.064s
ピーターO:awk '$1=="chr10"{print; next}{exit}' cov.txt >/dev/null
real 0m6.553s
user 0m6.484s
sys 0m0.068s
コース:perl -pe '!/chr10/&&exit' cov.txt >/dev/null
real 0m8.658s
user 0m8.545s
sys 0m0.112s
スティーブ:sed -n '/^chr10[^0-9]/ { p; b; }; q' cov.txt >/dev/null
real 0m17.130s
user 0m17.077s
sys 0m0.052s
ユーザー 3138373:awk '$1 ~ /^chr10$/{print}; $1 !~ /^chr10$/{exit}' cov.txt >/dev/null
real 0m18.621s
user 0m18.541s
sys 0m0.080s