GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana Mengurai Setiap Baris File Teks Sebagai Argumen Untuk Perintah?

Saya ingin menulis skrip yang menggunakan .txt nama file sebagai argumen, membaca file baris demi baris, dan meneruskan setiap baris ke perintah. Misalnya, menjalankan command --option "LINE 1" , lalu command --option "LINE 2" , dll. Output dari perintah ditulis ke file lain. Bagaimana cara saya melakukannya? Saya tidak tahu harus mulai dari mana.

Jawaban yang Diterima:

Gunakan while read lingkaran:

: > another_file  ## Truncate file.

while IFS= read -r LINE; do
    command --option "$LINE" >> another_file
done < file

Cara lainnya adalah mengarahkan ulang output per blok:

while IFS= read -r LINE; do
    command --option "$LINE"
done < file > another_file

Terakhir adalah membuka file:

exec 4> another_file

while IFS= read -r LINE; do
    command --option "$LINE" >&4
    echo xyz  ## Another optional command that sends output to stdout.
done < file

Jika salah satu perintah membaca input, sebaiknya gunakan fd lain untuk input sehingga perintah tidak akan memakannya (di sini dengan asumsi ksh , zsh atau bash untuk -u 3 , gunakan <&3 bukannya portabel):

while IFS= read -ru 3 LINE; do
    ...
done 3< file

Akhirnya untuk menerima argumen, Anda dapat melakukan:

#!/bin/bash

FILE=$1
ANOTHER_FILE=$2

exec 4> "$ANOTHER_FILE"

while IFS= read -ru 3 LINE; do
    command --option "$LINE" >&4
done 3< "$FILE"

Mana yang bisa dijalankan sebagai:

bash script.sh file another_file

Ide ekstra. Dengan bash , gunakan readarray :

readarray -t LINES < "$FILE"

for LINE in "${LINES[@]}"; do
    ...
done

Catatan:IFS= dapat dihilangkan jika Anda tidak keberatan nilai garis dipangkas dari spasi awal dan akhir.


Linux
  1. Bagaimana Cara Memindahkan Garis Dalam File Teks Ke Atas Atau Ke Bawah Dengan Satu Baris?

  2. Bagaimana cara mengganti file di jar dengan baris perintah di linux?

  3. Bagaimana cara membuat file yang dinamai seperti argumen baris perintah?

  1. Cara Mengubah Izin dan Pemilik melalui Command Line

  2. Cara Mengekstrak File tar.gz di Linux dengan Menggunakan Command Line

  3. Cara Menyisipkan Teks di awal setiap baris di Vim

  1. Cara Menambahkan Nomor Baris Ke File Teks Di Linux

  2. Bagaimana Cara Melewati Argumen Baris Perintah Menjadi Skrip Shell?

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