タグの数を含むゲノムデータファイルがありますが、一度に何個表示されるかを知りたいです。
$ grep "^1" file |wc -l
1で始まるすべての行が含まれているため、10、11、100、1245などのラベルが含まれています。どうすればいいですか?
Current format
79 TGCAG.....
1 TGCAG.....
1257 TGCAG.....
1 TGCAG......
私はただ次の行が欲しい:
1 TGCAG.....
したがって、1257 で始まる行を含めることはできません。メモ:上記のファイルはタブで区切られています。
答え1
体の中の質問
1
aで始まり、スペースが続く行を選択します。
grep -c '^1\s' file
grep -c '^1[[:space:]]' file
これは行数も提供します(wcを呼び出す必要はありません)。
タイトルに質問
ㅏ1
いいえ次は他の数字(または何もありません)が続きます。
grep -cE '^1([^0-9]|$)' file
しかし、上記の2つの回避策にはいくつかの興味深い問題があるので、読んでください。
質問本文では、ユーザーはファイルが「タブ区切り」であると主張します。
区切り記号
商標
1
aで始まり、その後にタブ文字(コマンドの実際のタブ文字)が続く行です。区切り文字が空白(または別の区切り文字または区切り文字がない場合)の場合、この操作は失敗します。
grep '^1 ' file
スペース
1
aで始まり、その後にスペース(コマンドの実際のスペース)が続く行です。区切り記号が別の区切り記号または区切り文字がない場合、この操作は失敗します。
grep '^1 ' file
タブまたはスペース
grep '^1( | )' file
grep '^1[[:blank:]]' file
スペース
より柔軟なオプションは、複数のスペース(水平および垂直)文字を含めることです。文字クラスセットは、(スペース)、(水平タブ)、(キャリッジリターン)、(改行)、(垂直タブ)、(フォームフィード)で構成されています[:space:]
。ただし、grepは改行文字と一致することはできません(これは内部制限であり、このオプションを介してのみ回避できます)。これは区切り文字の説明として使用できます。短い GNU 対応の省略形を使用することもできます。\t
\r
\n
\v
\f
-z
\s
grep -c '^1[[:space:]]` file
grep -c '^1\s' file
ただし、区切り文字がコロン:
またはその他の句読点文字(または文字)の場合、このオプションは失敗します。
境界
[_[:alnum:]]
または、数字から実際に「()_a-zA-Z0-9
にない文字」である「数字ではない」境界に変換を使用することもできます。
grep -c '^1\b' file # portable but not POSIX.
grep -c '^1\>' file # portable but not POSIX.
grep -wc '^1' file # portable but not POSIX.
grep -c '^1\W' file # portable but not POSIX (not match only a `1`) (not underscore in BSD).
これにより、1から始まり、その後に句読点が続く有効な行が許可されます。
答え2
あなたが望むものは次のとおりです。
$ grep '^1\b' a
1 TGCAG.....
1 TGCAG......
計算部分の場合:
$ grep -c '^1\b' file
2
答え3
そしてawk
:
awk '$1 == "1" { print; x++ } END { print x, "total matches" }' inputfile
答え4
使用grep
:
grep -c '^1\s' file
これは1で始まり、後にスペースが続くすべての行と一致し、その行の数を提供します(不要wc -l
)。
$ cat input
79 TGCAG.....
1 TGCAG.....
1257 TGCAG.....
1 TGCAG......
$ grep -Ec '^1\s' input
2