Android

Hogyan olvashatunk fájlt soronként bash-ban

C# Programozás - Fájlkezelés I.(fájlba írás)

C# Programozás - Fájlkezelés I.(fájlba írás)

Tartalomjegyzék:

Anonim

A Bash-szkriptek írásakor olykor olyan helyzetekbe kerül, amikor fájl-soronként el kell olvasnia. Lehet, hogy van például egy szöveges fájl, amely olyan adatokat tartalmaz, amelyeket a szkriptnek feldolgoznia kell.

Ebben az oktatóanyagban megbeszéljük, hogyan kell fájlt soronként elolvasni a Bash-ban.

Fájl soronkénti szintaxis olvasása

A fájl soronkénti olvasásához a következő általános szintaxis:

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

vagy azzal egyenértékű egysoros verzió:

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

Hogyan működik?

Az input fájl ( input_file ) annak a fájlnak a neve, amelyet nyitni szeretne az read parancs általi read . Az read parancs beolvassa a fájl soronként, minden sort hozzárendelve a sorváltozóhoz. Az összes sor feldolgozása után a rövid távú hurok megszűnik. A belső mező elválasztó ( IFS ) null karakterláncra van állítva, hogy megőrizze a kezdő és a hátsó szóközöket, ami az read parancs alapértelmezett viselkedése.

Fájlok olvasása soronként, példák

Vessen egy pillantást a következő példára. Tegyük fel, hogy van egy distros.txt nevű distros.txt amely a legnépszerűbb Linux disztribúciók és csomagkezelőik vesszővel elválasztva ( , ) elválasztott listáját tartalmazza:

distros.txt

Ubuntu, apt Debian, apt CentOS, yum Arch Linux, pacman Fedora, dnf

A fájl soronkénti olvasásához futtassa a következő kódot a terminálon:

while IFS= read -r line do echo "$line" done < distros.txt

A kód soronként elolvassa a fájlt, minden sort hozzárendel egy változóhoz, és visszhangja a változónak. Alapvetőség ugyanazt a kimenetet látná, mintha a fájl tartalmát a cat paranccsal jelenítené meg.

Mi van, ha csak az apt felhasználású disztribúciókat szeretné kinyomtatni? Ennek egyik módja az if utasítás használata és annak ellenőrzése, hogy a sor tartalmazza-e az apt alstringjét:

while IFS= read -r line do if]; then echo "$line" fi done < distros.txt

Ubuntu, apt Debian, apt

A fájl soronkénti olvasásakor több változót is átadhat az read parancsnak, amely az IFS alapján a sort mezőkre osztja. Az első mező az első változóhoz, a második a másodikhoz tartozik, és így tovább. Ha több mező van, mint változó, akkor a maradék mezőket az utolsó változóhoz rendelik.

A következő példában az IFS-t vesszőre ( , ) állítjuk , és két változót, distro és pm adunk az read parancshoz. Minden, a sor elejétől az első vesszőig, az első változóhoz lesz hozzárendelve ( distro ), a sor többi része pedig a második változóhoz lesz hozzárendelve ( pm ):

while IFS=, read -r distro pm do echo "$pm" is the package manager for "$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

Alternatív fájlolvasási módszerek

A folyamat helyettesítése

A folyamathelyettesítés lehetővé teszi, hogy a parancsból származó outputot fájlnévként továbbítsa:

while IFS= read -r line do echo "$line" done < <(cat input_file)

Itt egy karakterlánc használata

A Here String a Here dokumentum egyik változata. A karakterlánc (cat input_file) megtartja az új sorokat:

while IFS= read -r line do echo "$line" done <<< $(cat input_file)

A fájl leíró használata

A hurok bemenetét fájl leíróval is megadhatja:

while IFS= read -r -u9 line do echo "$line" done 9< input_file

A fájlleírókkal való munka során használjon 4 és 9 közötti számot, hogy elkerülje a ütközést a héj belső fájlleíróival.

Következtetés

A Bash alkalmazásban soronként olvashatunk egy fájlt azáltal, hogy megadjuk a fájlnevet egy beolvasási ciklus bemeneteként.

bash terminál