Localizar strings no arquivo1, contar ocorrências no arquivo2

2

Eu tenho file1.txt com valores de string como

New Drug Application
Drug Product
Dosing instructions

Preciso contar com que frequência essas sequências ocorrem em file2.txt com dados como

Regulatory New Drug Application for Drug Product after testing of Dosing instructions for all new studies.

Os comandos que usei são

foreach string ( 'cat terms.txt' )
foreach? echo $string >>out.txt
foreach? grep $string data.txt | wc >>out.txt
end

O out.txt não retornará a string completa com espaços. Em vez disso, ele retorna dados como:

The -1
New -2
Application -1
etc.

Eu tentei adicionar orçamentos e barras nos termos dos meus arquivos de dados, egrep , fgrep - sem sucesso. Como obtenho os dados desejados desses dois arquivos?

    
por Suzanne 22.06.2015 / 22:02

3 respostas

1

Tente isso:

fgrep -of file1.txt file2.txt | sort | uniq -c

Tenha em atenção que isto apenas encontrará as frases exatas. Se o espaçamento for diferente, ele não os encontrará.

    
por 22.06.2015 / 22:27
0

Provavelmente você poderia usar o IFS (Internal Field Separator), e atribuir o $ '\ n' a ele, significando que apenas newlines são o separador válido. Além disso, para detectar várias ocorrências da mesma chave no conteúdo, poderíamos usar a opção grep -o. Exemplo de script bash poderia ser como o seguinte:

IFS=$'\n'
for string in 'cat key.txt'
do
   $string >> out.txt
   grep -o $string content.txt | wc -l >> out.txt
done
    
por 22.06.2015 / 22:29
0

Você precisa percorrer toda a linha. Isso pode ser feito da seguinte forma -

    x=1
    len=$(wc -l file1.txt | awk '{print $1}')
    while [ $x -le $len ] 
    do
       #pat=$(head -$x  file1.txt | tail -1)  << slow hence changed
       pat=$(sed "${x}q;d" $1)
       #cnt=$(grep -c "$pat" file2.txt) < Edited to count all matches 
       cnt=$(grep -o "$pat" file2.txt| wc -l | awk '{print $1}')
       echo "$pat        $cnt"
       x=$(expr $x + 1)
    done

EDITADO: para acelerar e contar múltiplas ocorrências na mesma linha

    
por 22.06.2015 / 22:54