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

6

Eu tenho um arquivo de texto com o seguinte formato:

5 3 1
2 3 4
.....
.....
ou seja, espaço separado 3 colunas de números / No entanto, algumas das linhas podem ser como:
2
3 1
Então, quero detectar se o arquivo de texto tem alguma inconsistência e imprimi-lo. Como faço isso?

    
por user1715122 06.10.2013 / 23:08

3 respostas

7

Stephane Chazelas sugeriu

awk 'NF != 3'

Esta é uma maneira 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 qualquer linha for encontrada:

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

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

Você também pode fazer isso com o grep:

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

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

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

Use [␉ ]+ em vez de  + , em que é um caractere de tabulação se você quiser permitir uma ou mais guias como separadores de coluna. Use (␉| +) para permitir exatamente uma guia ou uma sequência de espaços.

    
por 07.10.2013 / 00:36
0

Caso o que você realmente queira seja o que é solicitado no título da sua pergunta, este comando awk imprimirá o número da linha e o número de campos em cada linha:

awk '{print NR,NF}'
    
por 07.10.2013 / 03:00
0
awk '{if(NF != 3) print NR,NF}' file.txt

Isto irá imprimir os números de linha no arquivo que não possuem 3 campos e o número de campos que eles têm.

    
por 07.10.2013 / 04:25