fastaファイルが複数あり、">"(引用符を除く)で始まる行数を計算したいと思います。
私がいつもすることは
grep ">" file.fasta | wc -l
この時間は1つのファイルに適用されます。私は以下を使用して他の選択肢を試しています。探すコマンドを実行しましたが、何も機能しないようです。私が最後にしたいのは、1行ずつ、ファイル名を指定して>で始まる行数を数えることです。理想的には1行でなければなりません。
答え1
grep
フラグを使用して計算できるため、-c
必要wc -l
ありません。また、grep
複数のファイルを提供する場合は、そのファイルが入力として使用されます。
例えば、
grep -c '^>' some/dir/*.fa
このタスクを再帰的に実行するには、そのオプションを知っているオプションがあるgrep -Rc '^>' dirname
場合に使用します(これは実行されます)。grep
-R
みんなファイル)、そうでない場合は以下を使用してくださいfind
。
find dirname -type f \( -name '*.fa' -o -name '*.fasta' \) -exec grep -c '^>' /dev/null {} +
/dev/null
上記のコマンドの追加項目は、grep
少なくとも2つの入力ファイルをインポートし、結果として処理するファイルの名前を常に表示することを保証します(単一の入力ファイルに対してはこれを行いません)。非標準オプションですが、-H
一緒に使用することもできます。grep
または、パス名が次のようなループに元のコマンドを挿入しますfind
。
find dirname -type f \( -name '*.fa' -o -name '*.fasta' \) -exec sh -c '
for pathname do
printf "Counting in %s...\n" "$pathname"
grep "^>" "$pathname" | wc -l
done' sh {} +
あなたのコマンド自体はファイル名を報告しないので、printf
これを言及する説明を追加しました。
関連: