Conte o número de linhas em cada coluna de um arquivo de texto

Conte o número de linhas em cada coluna de um arquivo de texto

Eu tenho um arquivo de texto com o seguinte formato:

5 3 1
2 3 4
.....
.....
ou seja, 3 colunas de números separadas por espaço/ No entanto, algumas das linhas podem ser como:
2
3 1
Então, quero detectar se o arquivo de texto possui algum desses inconsistências e imprimi-las. Como eu faço isso?

Responder1

Stéphane Chazelas sugeriu

awk 'NF != 3'

Esta é uma forma simples de imprimir todas as linhas que não possuem exatamente três colunas. Se você também quiser que o comando retorne um status de falha se alguma linha desse tipo for encontrada:

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

Remova print;para não imprimir nada e apenas reportar a presença de tais linhas através do status de saída.

Você também pode fazer isso com grep:

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

Se você quiser ser mais rigoroso e imprimir todas as linhas que não consistem exatamente em três colunas, cada uma contendo um número inteiro:

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

Use [␉ ]+em vez de  +onde está um caractere de tabulação se desejar permitir uma ou mais tabulações como separadores de coluna. Use (␉| +)para permitir exatamente uma tabulação ou uma sequência de espaços.

Responder2

Caso o que você realmente queira seja o que está escrito no título da sua pergunta, este awkcomando irá imprimir o número da linha e o número de campos em cada linha:

awk '{print NR,NF}'

Responder3

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

Isso imprimirá os números das linhas do arquivo que não possuem 3 campos e o número de campos que eles possuem.

informação relacionada