Solución 1:
Supongo que podría usar la cola para generar solo los últimos 4 GB más o menos usando el -c
cambiar
-c, --bytes=[+]NUM
generar los últimos NUM bytes; o use -c +NUM para generar una salida que comience con el byte NUM de cada archivo
Probablemente podrías hacer algo con dd también configurando bs=1
y skip
yendo al desplazamiento que desea comenzar, por ejemplo,
dd if=file bs=1024k skip=12g | grep something
Solución 2:
Estoy publicando esto porque algunos de los comentarios lo solicitaron.
Lo que terminé usando fue (archivo de 15 GB). Funcionó muy rápido y me ahorró mucho tiempo.
tail -f -c 14G file | grep something
También hice un punto de referencia muy rudimentario en el mismo archivo. Probé:
archivo grep xxx
// tomó una eternidad (> 5 minutos)
dd if=archivo bs=1 skip=14G | grep xxx
// muy rápido <1 segundo
cola -c 14g | grep xxx
// bastante rápido <2 segundos
el tail
es un poco más corto.
Nota: el sufijo usado g
y G
difieren por comando (Ubuntu 15.10)
Solución 3:
Esto no responde a la pregunta del título, pero hará lo que desea hacer. Use tac para invertir el archivo, luego use grep para encontrar su cadena. Si su cadena solo aparece una vez o un número conocido de veces en el archivo, deje que se ejecute hasta que encuentre el número conocido de apariciones. De esa forma, si su suposición acerca de dónde está en el archivo es incorrecta, igual lo encontrará. Si desea limitarlo, puede usar la cabeza para hacerlo. El comando principal iría entre tac y grep.
Entonces el comando se ve así:
tac < logfile | grep myString