Tengo una larga lista de direcciones IP, que no están en secuencia. Necesito encontrar cuántas direcciones IP hay antes / después de una dirección IP en particular. ¿Cómo puedo conseguir esto?
shell-script
text-processing
Mandar Shinde
fuente
fuente

Respuestas:
Número de líneas antes y después de una coincidencia, incluida la coincidencia (es decir, debe restar 1 del resultado si desea excluir la coincidencia):
Pero esto no tiene nada que ver con las direcciones IP en particular.
fuente
Quizás lo más fácil es,
Gracias @JoshepR por señalar el error
fuente
dc; probablemente lo dirija directamente a mí mismo, probablemente.Lo hice de dos maneras, aunque creo que me gusta más:
Eso los guarda a todos como variables de shell actuales, y luego los evalúa en el ciclo for para la salida. Cuenta el total de líneas en el archivo
wcy obtiene el primer número de línea coincidente consed.Su salida:
Yo también hice:
sedimprime solo los números coincidentes y de la última línea, luegotrtraduce las\nlíneas electrónicas intermedias a, yreadlee el primero desedlos resultados en$mly todos los demás en$ll. Los posibles casos de coincidencias múltiples se manejan eliminando todos los resultados, excepto el último, de$llla expansión cuando se configura de nuevo más tarde.Su salida:
Ambos métodos fueron probados en el archivo generado de la siguiente manera:
Lo hace, por número de línea:
"$IP"luego una línea\nelectrónicatr- que traduce ceros a\nlíneas de flujo y luego~/filefuente
Aquí hay un poco de código Perl que lo hace:
Esto cuenta el número total de líneas antes y después de la línea que contiene la IP
192.168.1.1. Reemplace con su IP deseada.Usando nada más que Bash:
fuente
$.lugar de un contador?$aftera$. - $before.$. - 1, guarde$.en$tmp. Fin de impresión$. - $tmp. Por lo tanto, no necesitamos un contador para ambos antes y después. Por supuesto, es menos legible que el tuyo.Estaba probando los siguientes comandos, que son un poco complicados, pero darían resultados precisos:
Después:
Antes de:
fuente
Una
awksolución que informa el número de líneas antes y después del último partidofuente
Greptiene una función que puede contar la cantidad de veces que se encuentra un patrón en particular. Si usa el-ccomando, lo hará. Con el comando-cy-v, esto contará cuántas veces esto no coincide con un patrón en particularEjemplo:
grep -c -v <pattern> fileEntonces, si intentas algo como:
grep -c -v 192.168.x.x file.logeso debería funcionar.fuente