Leggere un file linea per linea utilizzando Bash

Suraj Joshi 25 aprile 2021
Leggere un file linea per linea utilizzando Bash

Potremmo dover affrontare diverse situazioni in Bash, in cui dobbiamo elaborare i dati memorizzati in un file linea per linea. In questi casi, dobbiamo leggere il contenuto del file. Usiamo il comando read in Bash per leggere un file linea per linea.

Leggi il file linea per linea in Bash

Sintassi

while IFS= read -r line
do
  echo "$line"
done < file_name

Legge il contenuto del file file_name una linea alla volta e stampa le linee una alla volta nel terminale. Il bucle viene eseguito fino a raggiungere la fine del file. L’IFS è impostato sulla stringa nulla, che aiuta a mantenere gli spazi bianchi iniziali e finali.

In alternativa, il comando precedente può anche essere sostituito dal seguente comando all’interno di una singola linea:

while IFS= read -r line; do echo $line; done < file_name

Esempio: leggere il file linea per linea in Bash

Nell’esempio, leggeremo il file file.txt, che contiene numeri in ogni linea e poi troveremo la somma di tutti i numeri nel file.

Contenuto di file.txt

1
5
6
7
8
10
#!/bin/bash

sum=0
echo "The numbers in the file are:"
while IFS= read -r line
do
  echo "$line"
  sum=$(( $sum + $line ))
done < file.txt
echo "The sum of the numbers in the file is:$sum"

Produzione:

The numbers in the file are:
1
5
6
7
8
The sum of the numbers in the file is:27

Legge i numeri linea per linea da un file chiamato file.txt e poi riassume tutti quei numeri e infine fa eco alla somma.

Esempio: impostare i campi nei file su variabili

Possiamo impostare i campi nel file su variabili passando più variabili al comando read, che separerà i campi all’interno di una linea in base al valore di IFS.

Contenuto di file.txt

Rohit-10
Harish-30
Manish-50
Kapil-10
Anish-20
#!/bin/bash

while IFS=- read -r name earnings
do
    echo "$name" has made earnings of "$earnings" pounds today!
done < file.txt

Produzione:

Rohit has made earnings of 10 pounds today!
Harish has made earnings of 30 pounds today!
Manish has made earnings of 50 pounds today!
Kapil has made earnings of 10 pounds today!

Qui, ogni linea del file è divisa in due segmenti poiché abbiamo passato due variabili al comando read. Il primo segmento sarà assegnato alla variabile name, che si estende dall’inizio della linea fino al primo -, e la parte rimanente sarà assegnata alla variabile earnings.

Metodi alternativi per leggere i file in Bash

#!/bin/bash

while IFS=- read -r name earnings
do
    echo "$name" has made earnings of "$earnings" pounds today!
done < <(cat file.txt )

Produzione:

Rohit has made earnings of 10 pounds today!
Harish has made earnings of 30 pounds today!
Manish has made earnings of 50 pounds today!
Kapil has made earnings of 10 pounds today!

Qui, il nome del file file.txt viene passato al programma come output del comando cat.

Autore: Suraj Joshi
Suraj Joshi avatar Suraj Joshi avatar

Suraj Joshi is a backend software engineer at Matrice.ai.

LinkedIn