
Estoy intentando filtrar un archivo de registro realmente grande y me pregunto si hay alternativas para mis comandos. ¿O alguna optimización? aquí está el código:
#!/bin/bash
nice -20 sed '/./{H;$!d;};x;/37455299339/!d' 1.txt > /tmp/new.txt
nice -20 sed -n '/Acct-Status-Type/,/NAS-Identifier/p' /tmp/new.txt > /tmp/new_1.txt
rm /tmp/new.txt
nice -20 sed '/Acct-Status-Type/{x;p;x;}' /tmp/new_1.txt > /tmp/new_2.txt
rm /tmp/new_1.txt
nice -20 less /tmp/new_2.txt | grep -A1 -B1 37455299339 | grep -A1 -B1 User-Name > new_3.txt
Respuesta1
Como primer paso, eliminaría todos los archivos temporales y usaría pipe en su lugar: desde el primero, sed
puede canalizar la salida estándar al segundo y luego al tercero. Entonces, su less
comando es inútil: simplemente vuelva a canalizar desde el tercero sed
hasta grep
.
Al utilizar pipe tendrá muchos beneficios: en primer lugar, no desperdiciará su espacio en disco y, en segundo lugar, no tendrá que esperar todas estas E/S de disco.
Para encontrar mejor una solución, debes decirnos qué te bloquea actualmente: ¿es uno de los sed
comandos? ¿Cuál?