Como verificar se um arquivo é delimitado por tabulação e possui 8 colunas?

3

Eu tenho duas coisas que preciso verificar um arquivo de texto para:

  1. Se for delimitado por tabulação
  2. Se tiver exatamente 8 colunas

Como posso verificar essas coisas e mostrar uma mensagem de erro se um dos dois for falso?

    
por Michael Mrozek 12.09.2011 / 08:52

3 respostas

7

Uma solução é usar o awk:

awk -F "\t" 'NF != 8' data.txt

Este comando irá imprimir essas linhas no arquivo data.txt que não possui 8 campos.

    
por 12.09.2011 / 17:38
2

Você poderia usar um perl oneliner, assim:

perl -ne '(s/\t//go)==7 or die "Not tabdelimitedand 8-columned"' t.txt

Que sairá com uma mensagem de erro se o arquivo não estiver em conformidade. Para permitir mais scripts (bash):

if perl -ne '(s/\t//go)==7 or exit -1' t.txt
then
    echo correct format
else
    echo unexpected format
fi
    
por 12.09.2011 / 16:34
0
ct=($(sed -re 's/[^\t]//g' "$file" | expand -t1 | wc -l -c -L))

if (( ((ct[0] * 8) == ct[1]) && (ct[2] == 7) )) ;then
    echo "file contains 8 tab-delimited fields on every line"
else 
    if (( ct[1] == ct[0] )) ;then
        echo "file does not contain any tab-delimiters"
    else
        echo "file contains tabs, but does not have 8 fields on every line"
    fi
fi
    
por 13.09.2011 / 01:39