Unix shell script to read a file line by line and read word by word from each line
Talaan ng mga Nilalaman:
- Pagbasa ng isang File Line By Line Syntax
- Pagbasa ng isang File Line Ayon sa Mga Halimbawa ng Linya
- Mga Alternatibong Pamamaraan sa Pagbasa ng File
- Paggamit ng isang Pagpapalit ng Proseso
- Paggamit ng isang Narito String
- Gamit ang File descriptor
- Konklusyon
Kapag nagsusulat ng mga script ng Bash, makikita mo minsan ang iyong sarili sa mga sitwasyon kung saan kailangan mong magbasa ng isang linya ng file sa pamamagitan ng linya. Halimbawa, maaari kang magkaroon ng isang text file na naglalaman ng data na dapat na maiproseso ng script.
Sa tutorial na ito, tatalakayin namin kung paano basahin ang isang linya ng file sa pamamagitan ng linya sa Bash.
Pagbasa ng isang File Line By Line Syntax
Ang pinaka-pangkalahatang syntax para sa pagbabasa ng isang file line-by-line ay ang mga sumusunod:
while IFS= read -r line do echo "$line" done < input_file
o ang katumbas na bersyon ng solong linya:
while IFS= read -r line; do echo $line; done < input_file
Paano ito gumagana?
Ang input file (
input_file
) ay ang pangalan ng file na nais mong buksan para sa pagbabasa ng
input_file
utos. Ang
read
utos ay nagbabasa ng linya ng file ayon sa linya, na nagtatalaga ng bawat linya sa variable variable. Kapag ang lahat ng mga linya ay naproseso habang ang loop ay magtatapos. Ang panloob na field separator (
IFS
) ay nakatakda sa null string upang mapanatili ang nangunguna at trailing whitespace na kung saan ay ang default na pag-uugali ng utos na
read
.
Pagbasa ng isang File Line Ayon sa Mga Halimbawa ng Linya
Tingnan natin ang sumusunod na halimbawa. Ipagpalagay, mayroon kaming isang file na nagngangalang
distros.txt
naglalaman ng isang listahan ng ilan sa mga pinakatanyag na pamamahagi ng Linux at ang kanilang mga tagapamahala ng pakete na pinaghiwalay sa kuwit (
,
):
Ubuntu, apt Debian, apt CentOS, yum Arch Linux, pacman Fedora, dnf
Upang mabasa ang linya ng file ayon sa linya ay tatakbo mo ang sumusunod na code sa iyong terminal:
while IFS= read -r line do echo "$line" done < distros.txt
Babasahin ng code ang taludtod ng taludtod, itatalaga ang bawat linya sa isang variable, at i-echo ang variable. Ang pangunahing kaalaman ay makikita mo ang parehong output na parang ipapakita mo ang nilalaman ng file gamit ang utos ng pusa.
Paano kung nais mong i-print lamang ang mga pamamahagi na gumagamit ng angkop? Ang isang paraan ay ang paggamit kung ang pahayag at suriin kung ang linya ay naglalaman ng apt substring:
while IFS= read -r line do if]; then echo "$line" fi done < distros.txt
Ubuntu, apt Debian, apt
Kapag binabasa ang linya ng file ayon sa linya, maaari mo ring ipasa ang higit sa isang variable sa basahin na utos na hahatiin ang linya sa mga patlang batay sa
IFS
. Ang unang patlang ay itinalaga sa unang variable, ang pangalawa sa pangalawang variable, at iba pa. Kung mayroong higit na mga patlang kaysa sa mga variable, ang mga natitirang patlang ay itinalaga sa huling variable.
Sa mga sumusunod na halimbawa, inilalagay namin ang IFS sa isang kuwit (
,
) at ipinapasa ang dalawang variable na
distro
at
pm
sa pagbasa ng utos. Ang lahat mula sa simula ng linya hanggang sa unang kuwit ay itatalaga sa unang variable (
distro
) at ang natitirang linya ay itatalaga sa pangalawang variable (
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
Mga Alternatibong Pamamaraan sa Pagbasa ng File
Paggamit ng isang Pagpapalit ng Proseso
Pinapayagan ka ng pagpapalit ng proseso na maipasa ang output mula sa utos bilang isang filename:
while IFS= read -r line do echo "$line" done < <(cat input_file)
Paggamit ng isang Narito String
Narito ang String ay isang variant ng dokumento na Narito. Ang string
(cat input_file)
ay panatilihin ang mga newlines:
while IFS= read -r line do echo "$line" done <<< $(cat input_file)
Gamit ang File descriptor
Maaari mo ring ibigay ang pag-input sa loop gamit ang isang descriptor ng file:
while IFS= read -r -u9 line do echo "$line" done 9< input_file
Kapag nagtatrabaho sa mga naglalarawang file gumamit ng isang numero sa pagitan ng 4 at 9 upang maiwasan ang salungatan sa mga deskriptor ng internal na file.
Konklusyon
Sa Bash, maaari nating basahin ang isang file line-by-line sa pamamagitan ng pagbibigay ng filename bilang isang input sa isang habang nababasa ang loop.
terminal ng bashHabang ang Apple - at partikular na iPhone - ang mga tsismis ay isang dosenang isang dosenang, ang isang ito ay maaaring may merito. Para sa AT & T, ang isang mas mura na plano sa serbisyo sa antas ng entry ay maaaring humimok sa mga mamimili na nasa-bakod na nagmamahal sa iPhone ngunit hindi ang mga buwanang bayad na kasama nito. Ang isang $ 10 na diskwento ay maaaring hindi mukhang magkano, ngunit maaari itong maakit ang mga bagong tagasuskribi, lalo na kung sinamahan ng isang mas murang iPhon
[Karagdagang pagbabasa: Ang pinakamahusay na mga teleponong Android para sa bawat badyet. ]
Ang isang operating system ay isang kernel, isang pagsuporta sa cast ng mga programa, at isang konsepto. Para sa ilang mga komersyal na entity, ito rin ay isang kampanya sa marketing, hype at kita. Ngunit, ang Linux operating system ay isa pang lasa ng sistemang operating ng Unix? Oo. Kung gusto mo, bilang isang may-ari ng negosyo, nais malaman kung ang Linux ay sapat na tulad ng Unix na maaari mong lumipat mula sa isang komersyal na lasa ng Unix sa Linux na may pinakamaliit na problema at gasto
[Karagdagang pagbabasa: 4 Mga proyektong Linux para sa mga newbies at intermediate users]
Paano magbasa tulad ng isang pro sa isang oneplus
Para sa mga mambabasa na hindi makakakuha ng mga pangunahing kaalaman kung paano basahin nang perpekto sa kanilang mga aparato sa Android, mayroon kaming isang isinapersonal na karanasan sa 1st kamay na inilarawan para lamang sa iyo.