VCFファイルにこのコマンドを使用する必要があります。
grep -v "#" {name of VCF file} | wc -l
これは "#" のない行数を提供します。
しかし、私の問題は、私のディレクトリに多くのファイルがあり、個々の行数が必要であるということです。したがって、「#」を持たない各ファイルの行数が必要です。
私がするとき:grep -v "#" *.vcf* | wc -l
パイプは#なしですべてのファイルの行を合計します。各ファイルの行数を個別に知る必要があります。各ファイルの行を手動でパイプすることはできません(ファイルは千を超えています)。誰でも各ファイルの行数を取得する方法を提案できますか?よろしくお願いします!
ベストアンサー1
grep -c
パイプの代わりに使用してくださいwc -l
。
grep -c -v -- '#' *.vcf
現在のディレクトリにvcfファイルが1つしかない場合、その名前は出力されず、数だけがインポートされます。
grep
この問題を解決するには、GNU実装または互換性を介してこの-H
オプションを追加するだけです。
grep -Hcv -- '#' *.vcf
/dev/null
他の実装では、いつでもリストに追加してtail -n +2
パイプを介して削除できます。
grep -c -v -- '#' /dev/null *.vcf | tail -n +2
(サポートされているシェルオプションを設定しないと、プロセスは終了grep
ステータスを失いますが)。pipefail
一方、ファイル名なしで各数だけが必要な場合は、-h
代わりにGNUを使用する-H
か、サポートされていない実装を含むループを使用してくださいgrep
。grep
-h
for file in *.vcf; do grep -cv '#' < "$file"; done
または、完全終了ステータスとともに失敗を報告します。
(
ret=0
for file in *.vcf; do
grep -cv '#' < "$file" || ret=$?
done
exit "$ret"
)
あなたが得る場合パラメータリストが長すぎます。grep
エラー、次のツールを使用してリストを複数の呼び出しに分割できますxargs
(ここではGNUツールと仮定)。
printf '%s\0' *.vcf | xargs -r0 grep -cvH -- '#'
またはzsh
一緒に使用する場合zargs
:
autoload zargs
zargs -r -- *.vcf(Nn.) -- grep -cvH -- '#'
(これはglob修飾子機能を使用して通常のファイル(.
)に制限し、ファイルリストに数値ソート順序を使用し(n
)vcfファイルがない場合のエラーを防ぎます(-r
with N
)。