Come unire due dizionari conteggio di frequenza - unix cmd?


1

Ho due dizionari per il conteggio delle frequenze, ho provato a unirli usando join / sort cmd ma ho sempre un output errato o un conteggio delle frequenze diverso. Voglio unirli insieme, aggiungendo +1 se la parola esiste e la nuova parola conta 1

  7 umslipped
  1 umslippersmouthwashand
  3 umslobagas
 35 umslopogaas
  5 (umslopogaas
 15 (umslopogaas)
  1 umslower
  6 umsmall
  2 umsnag
  2 um[snaps
 13 umsnootchie
  2 umsnow
 84 umso
 14 um-so ##

Il secondo dizionario

1   palpating
1   palpated
1   palpate
1   palpably
1   palpable
1   palominos
1   palomino
1   palomar
1   palmyra
1   palmy
1   palmtops
1   palmtop
1   palms
1   palmolive
1   palmists
1   palmistry
1   palmist

Risposte:


3

Puoi usare awkper aggiungere tutto.

awk '{ arr[$2] += $1} END {for (key in arr) {printf "%4s %s\n", arr[key], key}}' file1 file2

Spiegazione

  • { arr[$2] += $1}imposta l'indice di array della nostra stringa aka $2al +=numero$1
  • END Quando abbiamo finito
  • {for (key in arr) {printf "%4s %s\n", arr[key], key}} Ripeti tutto e stampalo.

Cosa ho fatto per testarlo

file1

  7 umslipped
  1 umslippersmouthwashand
  3 umslobagas
 35 umslopogaas
  5 (umslopogaas
 15 (umslopogaas)
  1 umslower
  6 umsmall
  2 umsnag
  2 um[snaps
 13 umsnootchie
  2 umsnow
 84 umso
 14 um-so ##

file2

 14 um-so ##
 84 umso
  2 umsnow
 13 umsnootchie
  2 um[snaps
  2 umsnag
  6 umsmall
  1 umslower
 15 (umslopogaas)
  5 (umslopogaas
 35 umslopogaas
  3 umslobagas
  1 umslippersmouthwashand
  7 umslipped

Produzione

  10 (umslopogaas
  12 umsmall
   6 umslobagas
  28 um-so
   2 umslippersmouthwashand
  30 (umslopogaas)
  70 umslopogaas
  26 umsnootchie
   4 umsnag
 168 umso
   4 um[snaps
  14 umslipped
   4 umsnow
   2 umslower

mettere l'output nello stesso formato dell'input anziché scambiare l'ordine e aggiungere due punti significherebbe che il programma potrebbe essere utilizzato per elaborare i dati più volte.
icarus

Grazie, ma questo è un set di dati il ​​formato dovrebbe essere lo stesso,
white_terminal

@ahmedsabir Ho aggiornato il comando per modificare il formato con il risultato desiderato. Sono su cellulare, quindi aggiornerò l'output di esempio quando sono vicino a un computer
Zachary Brady,

@ahmedsabir Ho aggiornato il comando e l'output
Zachary Brady il

@ZacharyBrady, grazie mille, funziona come un fascino.
white_terminal
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.