La pregunta en el cuerpo
Seleccione líneas que comienzan con 1
y van seguidas de un espacio
grep -c "^1\s" file grep -c "^1[[:space:]]" file
Eso también dará el recuento de líneas (sin necesidad de la llamada a wc)
La pregunta en el título
A 1
no seguido de otro número (o nada):
grep -cE "^1([^0-9]|$)" file
Pero ambas soluciones anteriores tienen algunos temas interesantes, sigue leyendo.
En el cuerpo de la pregunta, el usuario afirma que el archivo está «delimitado por tabulaciones».
Delimitador
tab
Una línea que comienza wi th a 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 otro o ninguno:
grep "^1 " file
tabulación o espacio
grep "^1( | )" file grep "^1[[:blank:]]" file
espacios en blanco
Una opción más flexible es incluir varios caracteres de espacio (horizontales y verticales). El conjunto de clases de caracteres [:space:]
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 la opción -z
). Es posible utilizarlo como descripción en el delimitador. También es posible, y más breve, utilizar 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 de «no 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 comienzan con un 1 y van seguidas de algún carácter de puntuación.
Comentarios
Cualquiera de estos seleccionará líneas con un 1
en la primera columna
awk "$1 == 1" grep -w "^1"
Ambos pueden extenderse, por lo que ni siquiera necesita la wc
para contar las líneas
awk "$1==1 { x++ } END { print x }" grep -cw "^1"
Buenas respuestas aquí, pero asumiendo que no todas las líneas terminan en un espacio (como si hubieras ido algunos que realmente llegan a su «=»), puede usar esto:
grep -c "^1[^0-9]" file
Básicamente, coincide con cualquier línea que comience con uno, seguida de un no dígito, incluido el espacio en blanco. Un poco más detallado, pero también más infalible. (Aunque vale la pena señalar que aquí no hay nada para la condición nula de solo uno en la línea, no es sensible al final de línea).
Comentarios
También puede usar la siguiente línea:
$ awk -F" " "{if($1=="1") print $0}" <your file name> | wc -l
El parámetro -F
convierte el separador de campo en un espacio en blanco . Si el valor del primer campo es «1», se imprimirá su línea.