GNU/Linux >> Belajar Linux >  >> Linux

Cara Membaca File Baris Demi Baris di Bash

Saat menulis skrip Bash, Anda terkadang menemukan diri Anda dalam situasi di mana Anda perlu membaca file baris demi baris. Misalnya, Anda mungkin memiliki file teks yang berisi data yang harus diproses oleh skrip.

Dalam tutorial ini, kita akan membahas cara membaca file baris demi baris di Bash.

Membaca File Baris demi Baris Sintaks #

Sintaks paling umum untuk membaca file baris demi baris adalah sebagai berikut:

while IFS= read -r line; do
  printf '%s\n' "$line"
done < input_file

atau versi satu baris yang setara:

while IFS= read -r line; do printf '%s\n' "$line"; done < input_file

Bagaimana cara kerjanya?

File masukan (input_file ) adalah nama file yang dialihkan ke loop while. read perintah memproses file baris demi baris, menetapkan setiap baris ke line variabel. Setelah semua baris diproses, loop while akan berhenti.

Secara default, tombol read command menginterpretasikan garis miring terbalik sebagai karakter pelarian dan menghapus semua spasi putih awal dan akhir, yang terkadang dapat menyebabkan perilaku yang tidak diharapkan. Untuk menonaktifkan pelolosan garis miring terbalik, kami menjalankan perintah dengan -r opsi, dan untuk menonaktifkan pemangkasan, pemisah bidang internal (IFS ) dihapus.

Kami menggunakan [printf ] bukannya echo untuk membuat kode lebih portabel dan untuk menghindari perilaku yang tidak diinginkan. Misalnya, jika baris berisi nilai seperti “-e”, baris tersebut akan diperlakukan sebagai opsi gema.

Membaca File Baris demi Baris Contoh #

Mari kita lihat contoh berikut. Misalkan kita memiliki file bernama distros.txt berisi daftar beberapa distribusi Linux paling populer, dan manajer paketnya dipisahkan dengan koma (, ):

distros.txt
Ubuntu,apt
Debian,apt
CentOS,yum
Arch Linux,pacman
Fedora,dnf

Untuk membaca file baris demi baris, Anda akan menjalankan kode berikut di terminal Anda:

while IFS= read -r line; do
  printf '%s\n' "$line"
done < distros.txt

Kode membaca file per baris, menetapkan setiap baris ke variabel, dan mencetaknya. Pada dasarnya, Anda akan melihat output yang sama seperti jika Anda menampilkan konten file menggunakan cat perintah.

Bagaimana jika Anda ingin mencetak hanya distribusi yang menggunakan apt? Salah satu caranya adalah dengan menggunakan if pernyataandan periksa apakah baris berisi substring apt:

while IFS= read -r line; do
  if [[ "$line" == *"apt"* ]]; then
    printf '%s\n' "$line"
  fi
done < distros.txt
Ubuntu,apt
Debian,apt

Saat membaca file baris demi baris, Anda juga dapat meneruskan lebih dari satu variabel ke read perintah, yang akan membagi baris menjadi beberapa bidang berdasarkan IFS . Bidang pertama ditugaskan ke variabel pertama, yang kedua ke variabel kedua, dan seterusnya. Jika ada lebih banyak bidang daripada variabel, bidang yang tersisa ditetapkan ke variabel terakhir.

Dalam contoh berikut, kami menetapkan IFS ke koma (, ) dan berikan dua variabel distro dan pm ke read memerintah. Semuanya dari awal baris hingga koma pertama akan ditetapkan ke variabel pertama (distro ), dan sisa baris akan ditetapkan ke variabel kedua (pm ):

while IFS=, read -r distro pm; do
  printf '%s is the package manager for %s\n' "$pm" "$distro"
done < distros.txt
apt is the package manager for Ubuntu
apt is the package manager for Debian
yum is the package manager for CentOS
pacman is the package manager for Arch Linux
dnf is the package manager for Fedora

Metode Membaca File Alternatif #

Menggunakan Substitusi Proses #

Substitusi proses adalah fitur yang memungkinkan Anda menggunakan output dari perintah sebagai file:

while IFS= read -r line; do
  printf '%s\n' "$line"
done < <(cat input_file )

Menggunakan String Di Sini #

Here String adalah varian dari dokumen Here. String (cat input_file ) menyimpan baris baru:

while IFS= read -r line; do
  printf '%s\n' "$line"
done <<< $(cat input_file )

Menggunakan deskriptor File #

Anda juga dapat memberikan input ke loop menggunakan deskriptor file:

while IFS= read -r -u9 line; do
  printf '%s\n' "$line"
done 9< input_file

Saat bekerja dengan deskriptor file, gunakan angka antara 4 dan 9 untuk menghindari konflik dengan deskriptor file internal shell.

Kesimpulan #

Di Bash, kita dapat membaca file baris demi baris menggunakan loop while dan read perintah.

Jika Anda memiliki pertanyaan atau masukan, jangan ragu untuk memberikan komentar.


Linux
  1. Di Bash, bagaimana cara menambahkan string setelah setiap baris dalam file?

  2. Bagaimana cara mengurai file CSV di Bash?

  3. VIM:cara menuju ke baris yang tepat di Ubuntu

  1. Cara Menghapus Riwayat Baris Perintah BASH di Linux

  2. Bagaimana cara membaca baris kedua hingga terakhir dalam file menggunakan Bash?

  3. Bagaimana cara membaca baris terakhir file teks menjadi variabel menggunakan Bash?

  1. Kotak Sibuk Membaca File Baris demi Baris?

  2. Bagaimana Cara Membaca Variabel Dari File?

  3. Baca baris demi baris dalam skrip bash