この質問にはすでに回答があります:
コメント
回答
回答
本文の質問
1
で始まり、その後にスペースが続く行を選択します
grep -c "^1\s" file grep -c "^1[[:space:]]" file
これもカウントになります行数(wcを呼び出す必要はありません)
タイトルの質問
A 1
not の後に別の番号が続く(または何もない):
grep -cE "^1([^0-9]|$)" file
ただし、上記の両方のソリューションにはいくつかの興味深い問題については、読み続けてください。
質問の本文で、ユーザーはファイルが「タブ区切り」であると主張しています。
区切り文字
タブ
wiで始まる行1
の後にタブ(コマンドの実際のタブ)が続きます。区切り文字がスペース(またはその他、またはなし)の場合、これは失敗します。
grep "^1 " file
スペース
<で始まる行div id = "12b6c0e5e6">
の後にスペース(コマンド内の実際のスペース)が続きます。区切り文字が他の文字であるか、まったくない場合、これは失敗します。:
grep "^1 " file
タブまたはスペース
grep "^1( | )" file grep "^1[[:blank:]]" file
空白
より柔軟なオプションは、複数のスペース(水平および垂直)文字を含めることです。 [:space:]
文字クラスセットは、
(スペース)、\t
(水平タブ)で構成されます。 )、\r
(キャリッジリターン)、\n
(改行)、\v
(垂直タブ)および\f
(フォームフィード)。ただし、grepは改行と一致できません(これは内部制限であり、-z
オプションでのみ回避できます)。区切り文字の説明として使用することができます。 \s
のGNUで使用可能な短縮文字を使用することも可能であり、より短くなります。
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で始まり、句読文字が続く有効な行として受け入れられます。
コメント
これらのいずれかが、最初の列に1
が含まれる行を選択します
awk "$1 == 1" grep -w "^1"
これらは両方とも拡張できるため、行数を数えるためにwc
も必要ありません
awk "$1==1 { x++ } END { print x }" grep -cw "^1"
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
ここでは良い答えですが、すべての行がスペースで終わるわけではありません(実際に「=」に到達するものがある場合は、次のように使用できます。
grep -c "^1[^0-9]" file
基本的に、1で始まり、その後に続くすべての行に一致します。空白を含む数字以外。もう少し冗長ですが、より確実です。 (ここでは、1行1行のnull条件については何もありませんが、行末の影響を受けないことは注目に値します。)
コメント
以下の行も使用できます:
$ awk -F" " "{if($1=="1") print $0}" <your file name> | wc -l
パラメーター-F
は、フィールド区切り文字を空白にします。最初のフィールドの値が「1」の場合、その行が出力されます。