La question dans le corps
Sélectionnez les lignes qui commencent par un 1
et sont suivis d'un espace
grep -c '^1\s' file
grep -c '^1[[:space:]]' file
Cela donnera également le nombre de lignes (sans avoir besoin d'appeler wc)
La question dans le titre
Un 1
pas suivi d'un autre chiffre (ou rien) :
grep -cE '^1([^0-9]|$)' file
Mais les deux solutions ci-dessus ont des problèmes intéressants, continuez à lire.
Dans le corps de la question, l'utilisateur affirme que le fichier est "délimité par des tabulations".
Séparateur
onglet
Une ligne commençant par un 1
suivi d'un onglet (un onglet réel dans la commande). Cela échoue si le délimiteur est un espace (ou tout autre, ou aucun) :
grep '^1 ' file
espace
Une ligne commençant par un 1
suivi d'un espace (un espace réel dans la commande). Cela échoue si le délimiteur est autre ou aucun. :
grep '^1 ' file
tabulation ou espace
grep '^1( | )' file
grep '^1[[:blank:]]' file
espace blanc
Une option plus flexible consiste à inclure plusieurs espaces (horizontaux et verticaux). Le [:space:]
le jeu de classes de caractères est composé de (espace),
\t
(tabulation horizontale), \r
(retour chariot),\n
(nouvelle ligne), \v
(onglet vertical) et \f
(saut de page). Mais grep ne peut pas correspondre à une nouvelle ligne (c'est une limitation interne qui ne peut être évitée qu'avec le -z
option). Il est possible de l'utiliser comme description sur le délimiteur. Il est également possible, et plus court, d'utiliser le raccourci GNU disponible de \s
:
grep -c '^1[[:space:]]` file
grep -c '^1\s' file
Mais cette option échouera si le délimiteur est quelque chose comme deux-points :
ou tout autre caractère de ponctuation (ou n'importe quelle lettre).
Limite
Ou, nous pouvons utiliser la transition d'un chiffre à une limite "pas un chiffre", eh bien, en fait "un caractère qui n'est pas dans [_[: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).
Cela acceptera comme valides les lignes commençant par un 1 et suivies d'un caractère de ponctuation.
On dirait que vous voulez juste ceci :
$ grep '^1\b' a
1 TGCAG.....
1 TGCAG......
Pour la partie comptage de ceci :
$ grep -c '^1\b' file
2
Avec awk
:
awk '$1 == "1" { print; x++ } END { print x, "total matches" }' inputfile