Imprimir archivo después de omitir las primeras líneas X en Bash
-
Omitir Líneas Usando los Comandos
head
ytail
-
Use
vim
para saltar las primerasn
líneas -
Utilice
sed
para saltar las primerasn
líneas
Suponga que tiene un archivo, uno enorme, y desea mostrar su contenido. ¿Cómo lo harías?
Obviamente, no querrá imprimir todo el contenido del archivo, ya que no sería muy práctico. Le gustaría imprimir algunas líneas selectivas; tal vez usaría expresiones regulares para analizar el archivo y solo imprimiría las coincidencias.
Este artículo explicará varios métodos para hacerlo.
Omitir Líneas Usando los Comandos head
y tail
El siguiente ejemplo utiliza los cinco comandos Bash más utilizados para hacerlo:
tail fileName.txt
head fileName.txt
tail -n fileName.txt # here n is an integer
head -n fileName.txt # here n is an integer
tail +n fileName.txt # prints all lines starting from
# the nth file
Lo que hace el comando tail
es que imprime las últimas diez líneas de un archivo, mientras que head
imprime las primeras diez líneas de un archivo.
Cuando usa el comando tail
con la opción –n
, imprime las últimas n
líneas. Por el contrario, cuando usa el comando head
con la opción –n
, imprime las primeras n
líneas.
Es importante tener en cuenta que aquí n
es un número entero, por lo que cuando ejecute los comandos, deberá sustituir n
por un número entero.
El quinto método es algo complicado. Ignora las primeras líneas (n – 1)
e imprime todas las líneas posteriores.
Use vim
para saltar las primeras n
líneas
También puede usar el editor Vim para omitir las primeras líneas n
. Vim es un editor de texto basado en consola que le permite crear y cambiar cualquier documento de texto de manera muy eficiente.
Para usar Vim por primera vez, debe instalarlo. Use el siguiente comando para hacerlo:
sudo apt install vim
Ahora que Vim está instalado, llegamos a la parte comercial de nuestro propósito, que es usar Vim para omitir las primeras líneas n
.
Lo haremos mediante un archivo intermediario. Primero copiaremos el contenido de nuestro antiguo archivo a uno nuevo; luego, borraremos las primeras n
líneas del nuevo archivo.
Usaremos la redirección de entrada y salida para copiar el contenido de un archivo a otro. Si has estudiado el curso de sistema operativo, habrás oído hablar de la tabla ppfdt
(tabla de descriptores de archivos de procesos).
De forma predeterminada, el primer descriptor apunta a stdin
(o teclado), el segundo descriptor apunta a stdout
(o monitor) y el tercer descriptor apunta a stderror
.
Considere la siguiente secuencia de comandos para una mayor comprensión.
cat 0<old_file.txt 1>new_file.txt # copies old file’s contents to new file
El comando anterior lee el contenido del archivo antiguo y lo copia en el archivo nuevo. Observe cómo usamos el descriptor 0
para leer y el descriptor 1
para escribir.
Si encuentra este descriptor confuso, tenemos algo diferente para usted. Los siguientes comandos también funcionarán:
cat <old_file.txt >new_file.txt # copies old file’s contents to new file
cp <old_file.txt >new_file.txt # copies old file’s contents to new file
Tenga en cuenta que en el segundo método anterior, hemos utilizado el comando copiar (es decir, cp
). Toma dos argumentos: la ruta al archivo de origen y la ruta al archivo de destino.
Ahora que hemos terminado de copiar el archivo. Abra el nuevo archivo en Vim y use el siguiente comando:
vim new_file.txt
Ahora use Shift+Esc y escriba el siguiente comando en Vim:
:1,nd # here n is an integer number e.g., 2
El comando anterior elimina las primeras n
líneas en el nuevo_archivo.txt
. Aquí, d
significa eliminar.
Utilice sed
para saltar las primeras n
líneas
Crear un nuevo archivo y luego eliminar su contenido puede ser una molestia. Además, también consumirá mucha memoria adicional si el archivo antiguo es enorme.
Entonces, veamos un método más fácil para lograr lo mismo:
sed 1,nd old_file.txt # here n is an integer
Es importante tener en cuenta que el comando sed
no modificará el archivo antiguo. Más bien, simplemente mostrará el contenido del archivo antiguo después de eliminar las primeras n
líneas.