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
.
Suraj Joshi is a backend software engineer at Matrice.ai.
LinkedIn