Dal momento che si dispone di un nome di coppia, le espressioni regolari è il modo di andare avanti questo. All'inizio ho pensato che fosse semplice come un conteggio di grep sull'espressione regolare di joe o tom, ma direi che questo non ha tenuto conto dello scenario in cui tom e joe sono sulla stessa linea (o tom e tom per quella materia) .
test
.txt:
tom is really really cool! joe for the win!
tom is actually lame.
$ grep -c '\<\(tom\|joe\)\>' test.txt
2
Come si può vedere dal file test.txt, 2 è la risposta sbagliata, quindi abbiamo bisogno di tenere conto di nomi che sono sulla stessa linea.
Ho quindi utilizzato grep -o per mostrare solo la parte di una linea corrispondente che corrisponde al modello in cui ha fornito le corrispondenze modello corrette di tom o joe nel file. Ho quindi convogliato i risultati in numero di righe in wc per il conteggio delle righe.
$ grep -o '\(joe\|tom\)' test.txt|wc -l
3
3 ... la risposta corretta! Spero che questo aiuti
fonte
2011-08-24 08:08:52
grep conta le linee, non le parole. Una linea con 'tomtom' su di essa conta come uno o due? – tchrist
Che cosa vuoi esattamente? Conteggi multipli, uno per ogni parola che hai specificato? Somma dei conteggi per tutte le parole che hai specificato? Che cos'è la "parola"? Come già menzionato da Tchrist, il tuo esempio conta il numero di righe che corrispondono a un'espressione regolare, non il numero di parole. – GreyCat