Contagem de linhas com caracteres diferentes

0

Estou tentando escrever um comando que examina um arquivo cujo nome foi dado como parâmetro e imprime o número de linhas diferentes contendo exatamente 7 caracteres. Eu estava fazendo isso usando grep e find , mas estou indo errado. O que devo usar ou que padrão?

    
por Sasha Zhyhalo 28.06.2017 / 10:55

2 respostas

2

Este pode ser o seu comando. É um script que recebe um nome de arquivo na linha de comando e gera todas as linhas com exatamente sete caracteres:

#!/bin/sh
grep -c '^.......$' "$1"

Você precisa tornar o script executável acima (com algo como chmod +x script.sh ) e, em seguida, executá-lo com ./script.sh file , em que file é o nome do arquivo que você gostaria de examinar.

O comando

grep -c '^.......$'

produzirá o número de linhas no arquivo fornecido que contém exatamente sete caracteres (incluindo espaços).

Isso pode ser encurtado para

grep -cEx '.{7}'

O -E é necessário porque a expressão é agora uma expressão regular estendida . O sinalizador -x forçará a expressão a corresponder a uma linha completa.

Se você não quiser contar espaços e estiver interessado apenas em "caracteres de palavras" (alfanuméricos), use

grep -cExw '.{7}'

O sinal -w to grep forçará a correspondência a ser uma "palavra" (uma cadeia de caracteres alfanuméricos delimitada por caracteres não alfanuméricos).

Se você quiser contar quantas únicas linhas que preenchem esse critério (é assim que eu interpreto "linhas diferentes"), canalize o resultado de grep sem o -c sinalizar por uniq e wc -l . Isso contará o número de linhas exclusivas com exatamente sete caracteres de palavras.

grep -Exw '.{7}' | uniq | wc -l

No script, isso se torna

grep -Exw '.{7}' "$1" | uniq | wc -l
    
por 28.06.2017 / 11:04
0
perl -l -0777pe '$_ =()= /^.{7}$/gm' "$1"

awk 'length == 7' "$1" | wc -l

sed -Ee '/.{8}/d; /.{7}/!d' "$1" | grep -c .
    
por 28.06.2017 / 15:32