Não é possível obter contagens de linhas reais devido ao retorno de carro incorporado nos valores:

0

Eutenhoumarquivodelimitadordeentrada.Onúmerorealderegistrosnoarquivoé4.Masdevidoaretornosdecarronosvalores,agoraacontagemtotalé8.Eusóquerofazerumacontagemdelinhascombasenosvaloresdaprimeiracoluna.

Respostadeveser:4.

Eutenteiusaressescomandos,masnenhumdelesestáfuncionando:

grep-Eo'[0-9]+|'filename|sort-u|wc-lawk-F'|''{sub(/[^[:digit:]]+/,"", $1); a[$1]} END{for (z in a) ++i; print i}' filename

awk -F '|' '{sub(/[^[:digit:]]+/, "", $1); PRINT[$1]} END{for (z in a) ++i; print i}' filename

wc -l filename | sed 's/ *\([0-9]* \).*//'
    
por Karthik 27.08.2015 / 19:36

2 respostas

2

Este foi o mais próximo:

grep -Eo '[0-9]+|' filename | sort -u | wc -l

mas perdeu o objetivo por

  • não ancora a correspondência no início da linha
  • classificando / removendo desnecessariamente duplicatas dos dados

Para ancorar a expressão, coloque "^" no início do padrão e escape do "|" (já que é um metacaractere):

grep -Eo '^[0-9]+\|' filename | sort -u | wc -l

Próximo - descarte o sort -u . O grep ignora as linhas de continuação, e parece possível que algumas "duplicatas" possam ser removidas e que não sejam realmente duplicadas se as informações extras forem usadas.

Por fim, descarte o wc -l : POSIX grep tem uma opção -c que diz ao grep para imprimir a contagem de correspondências. Solte a opção -o (não é necessário). Então tudo que você precisa é

grep -Ec '^[0-9]+\|' filename
    
por 15.10.2015 / 02:57
0

isso pode funcionar

grep -c ^the desired string filename
wc -l thefile
    
por 27.08.2015 / 19:46