Cuente el número de filas en cada columna de un archivo de texto

Cuente el número de filas en cada columna de un archivo de texto

Tengo un archivo de texto con el siguiente formato:

5 3 1
2 3 4
.....
.....
es decir, 3 columnas de números separadas por espacios/ Sin embargo, algunas de las filas pueden ser como:
2
3 1
Entonces, quiero detectar si el archivo de texto tiene algo así. inconsistencias e imprimirlas. ¿Cómo hago esto?

Respuesta1

Stéphane Chazelas sugirió

awk 'NF != 3'

Esta es una forma sencilla de imprimir todas las líneas que no tienen exactamente tres columnas. Si también desea que el comando devuelva un estado de error si se encuentra alguna de estas líneas:

awk 'NF != 3 {print; ++bad} END {exit(!!bad)}'

Eliminar print;para no imprimir nada y solo informar la presencia de dichas líneas a través del estado de salida.

También puedes hacer esto con grep:

grep -Ev '^[^ ]+ +[^ ]+ +[^ ]+$'

Si desea ser más estricto e imprimir todas las líneas que no constan exactamente de tres columnas, cada una de las cuales contiene un número entero:

grep -Ev '^([0-9]+) +([0-9]+) +([0-9]+)$'

Utilice [␉ ]+en lugar de  +dónde hay un carácter de tabulación si desea permitir una o más tabulaciones como separadores de columnas. Úselo (␉| +)para permitir exactamente una pestaña o una secuencia de espacios.

Respuesta2

En caso de que lo que realmente desee es lo que se pide en el título de su pregunta, este awkcomando imprimirá el número de línea y el número de campos en cada línea:

awk '{print NR,NF}'

Respuesta3

awk '{if(NF != 3) print NR,NF}' file.txt

Esto imprimirá los números de fila en el archivo que no tienen 3 campos y la cantidad de campos que tienen.

información relacionada