Agregar números de línea a la salida estándar de archivos de texto en la terminal

about agregar líneas

En el siguiente artículo vamos a ver algunas formas de añadir los números de línea a los archivos de texto que visualicemos desde la terminal. Si alguna vez te has preguntado cómo agregar estos números de línea a la salida estándar de archivos de texto de tu Gnu/Linux, este breve artículo va a intentar explicar diferentes maneras de hacerlo.

Hay varias maneras de agregar los números de línea a un archivo de texto. A continuación vamos a ver 6 métodos diferentes para hacerlo. Imagino que además de los que a continuación se van a poder ver, habrá algunas otras maneras, pero para empezar, estas son suficientes.

Agregar números de línea a la salida estándar de archivos de texto

Para empezar, vamos a crear un archivo llamado archivo.txt. En el añadiré unas cuantas líneas para dar contenido, las cuales estarán identificadas. Para ver el contenido del archivo que acabo de crear, abriremos la terminal (Ctrl+Alt+T) y escribimos en ella:

cat líneas

cat archivo.txt

Usando el comando nl

Como puede verse en el resultado del comando cat, el archivo tiene 10 líneas, con tres de ellas vacías. Agregaremos los números de línea mediante el comando nl. Para hacerlo, ejecuta:

nl líneas

nl archivo.txt

Como se ha podido ver en la anterior captura, el comando nl no tiene en cuenta las líneas vacías. Solo agrega los números a líneas no en blanco. Si quieres numerar todas las líneas, incluidas las líneas en blanco, ejecuta:

nl -b a líneas

nl -b a archivo.txt

Además, para una mayor claridad a la hora de leer el resultado, podremos agregar un símbolo después de los números. Por ejemplo, para agregar un punto después de los números, ejecuta:

nl -s punto líneas

nl -s "." archivo.txt

Es posible que desees alinear el ancho de la salida. Para hacerlo, usa la opción -w con un valor variable como se muestra a continuación:

nl w3 líneas

nl -w3 archivo.txt

Usando el comando cat

El comando cat se usa para mostrar el contenido de un archivo, como se ha podido ver en la primera captura de este artículo. Si deseas agregar números a la salida de un archivo, usa -n como se muestra a continuación:

cat -n líneas

cat -n archivo.txt

Es posible que te pueda interesar pasar la salida estándar a un archivo nuevo. Para hacerlo solo tienes que ejecutar el comando como se muestra a continuación:

cat -n archivo.txt > nuevoarchivo.txt

Usando el comando awk

Este es quizás el método más complejo para el resultado obtenido. Para agregar números de línea a la salida de un archivo usando el comando awk, ejecuta:

awk líneas

awk 'BEGIN{i=1} /.*/{printf "%d.% s\n",i,$0; i++}' archivo.txt

Como se ha visto, he asignado el número inicial como 1 en el parámetro BEGIN. Podremos asignar cualquier otro número inicial a tu elección, por ejemplo 5, como se puede ver a continuación:

awk comienzo en 5

awk 'BEGIN{i=5} /.*/{printf "%d.% s\n",i,$0; i++}' archivo.txt

Utiliza el siguiente comando si no quieres tener en cuenta las líneas en blanco:

awk sin líneas en blanco

awk 'BEGIN{i=0} {if($0 !~ /^$/) {printf ("%d.%s \n",i,$0); i++} else { print $0} } ' archivo.txt

Si crees que los comandos anteriores son un poco difíciles de recordar, utiliza el siguiente comando, que te dará el mismo resultado que el primero de los mostrados con el comando AWK:

awk FNR

awk '{ print FNR " " $0 }' archivo.txt

Usando el comando sed

Para agregar el número de línea a una salida estándar de un archivo usando el comando sed, ejecuta:

sed líneas

sed '/./=' archivo.txt | sed '/./N; s/\n/ /'

El comando sed tiene una característica genial que hay que mencionar. Podemos mostrar una línea en concreto de un archivo. Por ejemplo, para mostrar la séptima línea de nuestro archivo, ejecuta:

sed línea concreta

sed -n 7p archivo.txt

Usando el comando less

Para añadir el número con la salida estándar de un archivo usando less, ejecuta:

less -n

less -N archivo.txt

Usando el comando grep

El comando grep se puede utilizar para buscar una línea que contenga un texto específico. Si deseas agregar los números de línea a las líneas que contienen el texto que se busca, ejecuta:

grep -n

grep -n "línea" archivo.txt

Hay que tener en cuenta que este comando solo agregará los números a las líneas que contienen la cadena de búsqueda. Además, como se ve en la captura, colorea el texto buscado. Todo lo demás en el archivo dado se omitirá.

Y eso es todo, aun que hay que decir que estos comandos tienen otras opciones que pueden complementar o ampliar las que se han descrito en este artículo. Para obtener más información sobre los comandos que aquí se han nombrado, se pueden consultar las páginas man.


Deja tu comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*

*

  1. Responsable de los datos: Miguel Ángel Gatón
  2. Finalidad de los datos: Controlar el SPAM, gestión de comentarios.
  3. Legitimación: Tu consentimiento
  4. Comunicación de los datos: No se comunicarán los datos a terceros salvo por obligación legal.
  5. Almacenamiento de los datos: Base de datos alojada en Occentus Networks (UE)
  6. Derechos: En cualquier momento puedes limitar, recuperar y borrar tu información.

  1.   nadie dijo

    en los comandos de awk no hace falta la busqueda de expresiones regulares «/.*/»
    por defecto ya divide el fichero en lineas y $0 contiene la linea, por lo que

    awk ‘BEGIN{i=1} {printf «%03d: %s\n»,i,$0; i++}’ archivo.txt

    funciona igual (y mejor) que

    awk ‘BEGIN{i=1} /.*/{printf «%d.% s\n»,i,$0; i++}’ archivo.txt

  2.   Miguel Quintana dijo

    Excelente aporte! muchas gracias!

  3.   Rodrigo Luna dijo

    Antes de empezar un amable saludo.

    Tengo aquí un issue con el siguiente script.

    Desde un archivo se obtiene informacion de las lineas que empatan con una busqueda y se guardan en una variable.
    Ejemplo:
    valorores=`awk -F «:» ‘{print $1 » » $2 » » $3}’ hociporky | grep «201025» -n`

    Luego haces una iteracion por la variable y despues buscas linea en especifico en el archivo.
    Ejemplo:
    for valor in $valores; do
    sed -n «${valor}p» archivo
    done

    Pero esto manda un error
    sed: -e expression #1, char 1: unknown command: `

    Alguien puede explicarme a que se debe y como se podria solucionar esto?