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
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 awk
comando 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.