La pregunta en el cuerpo
Seleccione líneas que comiencen con un 1
y van seguidos de un espacio
grep -c '^1\s' file
grep -c '^1[[:space:]]' file
Eso también dará el conteo de líneas (sin necesidad de llamar a wc)
La pregunta del título
Un 1
no seguido de otro número (o nada):
grep -cE '^1([^0-9]|$)' file
Pero las dos soluciones anteriores tienen algunos problemas interesantes, sigue leyendo.
En el cuerpo de la pregunta, el usuario afirma que el archivo está "delimitado por tabuladores".
Delimitador
pestaña
Una línea que comienza con un 1
seguido de una pestaña (una pestaña real en el comando). Esto falla si el delimitador es un espacio (o cualquier otro, o ninguno):
grep '^1 ' file
espacio
Una línea que comienza con un 1
seguido de un espacio (un espacio real en el comando). Esto falla si el delimitador es cualquier otro o ninguno.:
grep '^1 ' file
tabulador o espacio
grep '^1( | )' file
grep '^1[[:blank:]]' file
espacio en blanco
Una opción más flexible es incluir varios caracteres de espacio (horizontal y vertical). El [:space:]
el conjunto de clases de caracteres se compone de (espacio),
\t
(pestaña horizontal), \r
(retorno de carro),\n
(nueva línea), \v
(pestaña vertical) y \f
(alimentación de formulario). Pero grep no puede coincidir con una nueva línea (es una limitación interna que solo podría evitarse con el -z
opción). Es posible usarlo como una descripción en el delimitador. También es posible, y más corto, usar la abreviatura disponible de GNU de \s
:
grep -c '^1[[:space:]]` file
grep -c '^1\s' file
Pero esta opción fallará si el delimitador es algo así como dos puntos :
o cualquier otro carácter de puntuación (o cualquier letra).
Límite
O bien, podemos usar la transición de un dígito a un límite "no es un dígito", bueno, en realidad "un carácter que no está en [_[: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).
Esto aceptará como válidas las líneas que comiencen con un 1 y vayan seguidas de algún carácter de puntuación.
Parece que solo quieres esto:
$ grep '^1\b' a
1 TGCAG.....
1 TGCAG......
Para la parte de conteo de esto:
$ grep -c '^1\b' file
2
Con awk
:
awk '$1 == "1" { print; x++ } END { print x, "total matches" }' inputfile