Red de conocimiento informático - Material del sitio web - Cómo leer un archivo línea por línea usando Shell

Cómo leer un archivo línea por línea usando Shell

Hay muchas formas de leer un archivo línea por línea en Linux, entre las cuales el siguiente método es el más utilizado y es el más eficiente y utilizado.

Para brindarle una sensación intuitiva, probaremos la eficiencia de ejecución de varios métodos generando un archivo grande.

Método 1: El método más eficiente y más utilizado en el bucle while.

El código es el siguiente:

función while_read_LINE_bottm(){

Mientras lee LINE

hacer

echo $LINE

done < $FILENAME

}

Nota: estoy acostumbrado a llamar a este método como lectura, porque este método necesita ejecutar el archivo en el end.Es como leer el archivo después de la ejecución.

Método 2: Método de redireccionamiento; método de canalización: cat $FILENAME | while read LINE

El código es el siguiente:

Función While_read_LINE(){

cat $FILENAME | mientras lee LINE

do

echo $LINE

hecho

}

Nota: Simplemente llamo a este método método de canalización. Deberías poder distinguirlo de la comparación. Cuando se encuentra una tubería, la salida del comando en el lado izquierdo de la tubería se usará como entrada del comando en el lado derecho de la tubería y luego se ingresará.

Método 3: Método de descriptor de archivo

El código es el siguiente:

Función while_read_line_fd(){

Exec 3<&0

Exec 0<$FILENAME

Mientras lee LINE

Hacer

Echo $LINE

Exec 0<& <3

}

Nota: Este método tiene 2 pasos: primero, cierre el descriptor de archivo 0 redirigiendo todo al descriptor de archivo 3. Para esto usamos SyntaxExec 3<&0. La segunda parte coloca el archivo de entrada en el descriptor de archivo 0, que es la entrada estándar.

Método 4 para bucle.

El código es el siguiente:

function for_in_file(){

Para i en `cat $FILENAME`

do

echo $i

done

}

Nota: este método consiste en leer el contenido del archivo a través de un bucle for, que es más familiar para todos Bueno, no hay mucho que decir aquí. Pruebe cada método para ver cuál tiene la mayor eficiencia de ejecución.

Primero, utilizamos un script (consulte el archivo adjunto del script) para generar un archivo de 70.000 líneas. La ubicación del archivo es /scripts/bigfile. Luego utilice el siguiente script para probar la eficiencia de ejecución de cada método. El script es muy simple y no se explicará más.

El código es el siguiente:

#!/bin/bash

FILENAME="$1"

TIMEFILE="/tmp /loopfile. out" > $TIMEFILE

SCRIPT=$(nombre base $0)

uso de la función(){

echo -e "\nUSO: $SCRIPT file \n "

salida 1

}

función while_read_bottm(){

mientras lee LINE

hacer

p>

echo $LINE

hecho < $FILENAME

}

función while_read_line(){

cat $FILENAME | mientras se lee LINE

hacer

echo $LINE

hecho

}

función while_read_line_fd(){

ejecutivo 3<&0

ejecutivo 0< $FILENAME

mientras lee LINE

haz

echo $LINE

hecho

exec 0<&3

}

función for_in_file(){

para i en ` cat $FILENAME`

hacer

echo $i

hecho

}

if [ $# - lt 1 ] ; entonces

uso

fi

echo -e " \n iniciando el procesamiento de archivos de cada método\n"

echo -e "método 1:"

echo -e "función while_read_bottm"

tiempo while_read_bottm >> $TIMEFILE

echo -e "\n"

echo -e "método 2:"

echo -e "función while_read_line "

tiempo while_read_line >> $TIMEFILE

echo - e "\n"

echo -e "método 3:"

echo "función while_read_line_fd"

tiempo while_read_line_fd >>$TIMEFILE

echo -e "\n"

echo -e "método 4:"

echo -e "función for_in_file"

tiempo para_en_archivo >

> $TIMEFILE

Después de ejecutar el script: [root@localhost shell]# ./ while /scripts/bigfile

Contenido de salida del script:

El código es de la siguiente manera:

método 1:

función while_read_bottm

real 0m5.689s

usuario 0m3.399s

sys 0m1 588s

método 2:

función while_read_line

real 0m11.612s

usuario 0m4.031s

sys 0m4.956s

método 3:

función while_read_line_fd

real 0m5.853s

usuario 0m3.536s

sys 0m1.469s

método 4:

función for_in_file

real 0m5.153s

usuario 0m3.335s

sys 0m1.593s

A continuación clasificamos cada método según la velocidad.

El código es el siguiente:

real 0m5.153s método 4 (método for loop)

real 0m5.689s método 1 (método while)

real 0m5.853s método 3 (método identificador)

real 0m11.612s método 2 (método canalización)

Se puede observar que entre los diversos métodos, el La declaración for es la más eficiente, mientras lee y escribe archivos en el bucle while,

El código es el siguiente:

while read LINE

do

echo $LINE

done < $FILENAME

tiene la mayor eficiencia de ejecución.