Saltar al contenido

¿Cómo recorrer las líneas de un archivo?

La guía o código que hallarás en este post es la resolución más rápida y efectiva que encontramos a tu duda o problema.

Solución:

Con for y SFI:

#!/bin/bash

IFS=$'n'       # make newlines the only separator
set -f          # disable globbing
for i in $(cat < "$1"); do
  echo "tester: $i"
done

Sin embargo, tenga en cuenta que omitirá las líneas vacías como nueva línea al ser un carácter de espacio en blanco IFS, las secuencias del mismo cuentan como 1 y se ignoran las iniciales y finales. Con zsh y ksh93 (no bash), puede cambiarlo a IFS=$'nn' para que la nueva línea no sea tratada de manera especial, sin embargo, tenga en cuenta que todos arrastrando los caracteres de nueva línea (que incluyen las líneas vacías al final) siempre se eliminarán mediante la sustitución del comando.

O con read (no más cat):

#!/bin/bash

while IFS= read -r line; do
  echo "tester: $line"
done < "$1"

Allí, las líneas vacías se conservan, pero tenga en cuenta que omitiría la última línea si no estuviera debidamente delimitada por un carácter de nueva línea.

(9 años después 🙂
Ambas respuestas proporcionadas fallarían en los archivos sin una nueva línea al final, esto omitirá efectivamente la última línea, no producirá errores, conduciría al desastre (aprendido de manera difícil :).

La mejor solución concisa que encontré hasta ahora es "Just Works" (tanto en bash como en sh):

while IFS='' read -r LINE || [ -n "$LINE" ]; do
    echo "processing line: $LINE"
done < /path/to/input/file.txt

Para una discusión más profunda, vea esta discusión de StackOverflow: ¿Cómo usar "mientras lee" (Bash) para leer la última línea en un archivo si no hay una nueva línea al final del archivo?

Cuidado: este enfoque agrega una nueva línea adicional a la última línea si ya no hay ninguna.

Si para ti ha resultado provechoso nuestro post, nos gustaría que lo compartas con otros desarrolladores de este modo nos ayudas a difundir nuestra información.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

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