Tengo un archivo en Linux que contiene cadenas:
CALLTMA Starting Starting Ending Starting Ending Ending CALLTMA EndingNecesito la cantidad de cualquier cadena (FE. #Finalización, # Inicio, #CALLTMA). En mi ejemplo necesito obtener:
CALLTMA : 2 Starting: 3 Ending : 4Puedo obtener esta salida cuando ejecuto 3 comandos:
grep -i "Starting" "/myfile.txt" | wc -l grep -i "Ending" "/myfile.txt" | wc -l grep -i "CALLTMA" "/myfile.txt" | wc -lQuiero saber si es posible obtener el mismo resultado usando solo un comando.
Intento ejecutar este comando
grep -iE "CALLTMA|Starting|Ending" "/myfile.txt" | wc -lPero esto devolvió el total de coincidencias. Aprecio tu ayuda .
Utilice sort y uniq :
sort myfile.txt | uniq -c El -c agrega los recuentos a las líneas únicas. Si desea ordenar la salida por frecuencia, agregue
| sort -n hasta el final (y cambia a -nr si quieres el orden descendente).
Una manera simple y extraña de manejar esto:
awk '{counts[$1]++} END{for (c in counts) print c, counts[c]}' file Starting 3 Ending 4 CALLTMA 2grep -c funcionará. Puede ponerlo todo junto en un breve guión:
for i in Starting CALLTMA Ending; do printf "%-8s : %d\n" "$i" $(grep -c "$i" file.txt) done (para ingresar los términos de búsqueda como argumentos, simplemente use la matriz de argumentos para la lista de bucles, por ejemplo, for i in "$@"; do )
Producción
Starting : 3 CALLTMA : 2 Ending : 4