Njia tofauti za Kusoma Faili kwenye Hati ya Bash Kutumia Wakati Kitanzi


Nakala hii ni juu ya jinsi ya kusoma faili kwenye hati za bash kwa kutumia kitanzi cha muda. Kusoma faili ni operesheni ya kawaida katika programu. Unapaswa kufahamu njia tofauti na ni njia gani ni bora zaidi kutumia. Kwa bash, kazi moja inaweza kupatikana kwa njia nyingi lakini daima kuna njia bora ya kukamilisha kazi na tunapaswa kuifuata.

Kabla ya kuona jinsi ya kusoma yaliyomo kwenye faili kwa kutumia wakati kitanzi, kitangulizi cha haraka cha jinsi kitanzi kinavyofanya kazi. Wakati kitanzi hutathmini hali na kurudia zaidi ya seti fulani ya misimbo wakati hali ni kweli.

while [ CONDITION ]
do
    code block
done

Wacha tuchambue wakati syntax ya kitanzi.

  • wakati kitanzi kinapaswa kuanza na nenomsingi la muda likifuatiwa na hali.
  • Sharti linapaswa kuambatanishwa ndani ya [ ] au [[ ]]. Sharti lazima lirudi kuwa kweli ili kitanzi kitekelezwe.
  • Kizuizi halisi cha msimbo kitawekwa kati ya kufanya na kumaliza.

NUMBER=0

while [[ $NUMBER -le 10 ]]
do
    echo " Welcome ${NUMBER} times "
    (( NUMBER++ ))
done

Huu ni mfano rahisi sana, ambapo kitanzi kinatekeleza hadi NUMBER si kubwa kuliko 10 na kuchapisha taarifa ya mwangwi.

Pamoja na wakati tutatumia amri ya kusoma kusoma yaliyomo kwenye mstari wa faili kwa mstari. Ifuatayo ni syntax ya jinsi amri za wakati na kusoma zinavyounganishwa. Sasa kuna njia tofauti za kupitisha faili kama pembejeo na tutaziona zote.

# SYNTAX
while read VARIABLE
do
    code
done

Kuweka bomba kwenye Linux

Kwa kawaida tutatumia aina, nk.

Vile vile, tutatumia paka amri hapa kusoma maudhui ya faili na bomba kwa kitanzi cha muda. Kwa onyesho, ninatumia faili ya /etc/passwd lakini haifai kuchafua faili hii kwa hivyo chukua nakala rudufu ya faili hii na ucheze nayo ikiwa unataka hivyo.

cat /etc/passwd | while read LREAD
do
    echo ${LREAD}
done

Hebu tuchambue nini kitatokea wakati msimbo ulio hapo juu utawasilishwa.

  • paka /etc/passwd itasoma yaliyomo kwenye faili na kuipitisha kama ingizo kupitia bomba.
  • amri ya kusoma husoma kila mstari unaopitishwa kama ingizo kutoka kwa amri ya paka na huihifadhi katika muundo wa LREAD.
  • amri ya kusoma itasoma yaliyomo kwenye faili hadi EOL itafsiriwe.

Unaweza pia kutumia amri zingine kama kichwa, mkia, na bomba kwa wakati kitanzi.

head -n 5 /etc/passwd | while read LREAD
do
    echo ${LREAD}
done

Ingiza Uelekezaji Upya katika Linux

Tunaweza kuelekeza maudhui ya faili kwenye wakati wa kugeuza kwa kutumia kiendeshaji cha uelekezaji upya wa Ingizo (<).

while read LREAD
do
    echo ${LREAD}
done < /etc/passwd | head -n 5

Unaweza pia kuhifadhi jina la faili kwa kutofautisha na kuipitisha kupitia opereta ya uelekezaji upya.

FILENAME="/etc/passwd"

while read LREAD
do
    echo ${LREAD}
done < ${FILENAME}

Unaweza pia kupitisha majina ya faili kama hoja kwa hati yako.

while read LREAD
do
    echo ${LREAD}
done < $1 | head -n 5

Kitenganishi cha Sehemu ya Ndani

Unaweza kufanya kazi na aina tofauti za umbizo la faili (CSV, TXT, JSON) na unaweza kutaka kugawanya yaliyomo kwenye faili kulingana na kikomo maalum. Katika hali hii, unaweza kutumia \Kitenganishi cha ndani cha uga (IFS) kugawanya maudhui ya faili na kuihifadhi katika vigeu.

Acha nionyeshe jinsi inavyofanya kazi. Angalia /etc/passwd faili ambayo ina koloni (:) kama kizuizi. Sasa unaweza kugawanya kila neno kutoka kwa mstari na kulihifadhi katika tofauti tofauti.

Katika mfano ulio hapa chini, ninagawanya /etc/passwd faili na koloni kama kitenganishi changu na kuhifadhi kila mgawanyiko katika anuwai tofauti.

while IFS=":" read A B C D E F G
do
    echo ${A}
    echo ${B}
    echo ${C}
    echo ${D}
    echo ${E}
    echo ${F}
    echo ${G}
done < /etc/passwd

Nilionyesha mstari mmoja tu uliogawanyika kwenye picha ya skrini hapo juu ukizingatia saizi ya picha ya skrini.

Mistari Tupu katika Linux

Laini tupu hazipuuzwi unapopitia yaliyomo kwenye faili. Ili kuonyesha hili nimeunda faili ya mfano na yaliyomo hapa chini. Kuna mistari 4 na mistari tupu machache, nafasi nyeupe inayoongoza, nafasi nyeupe inayofuata, vibambo vya kichupo katika mstari wa 2, na baadhi ya vibambo vya kutoroka (\n na \t).

while read LREAD
do
    echo ${LREAD}
done < testfile

Tazama matokeo, mstari tupu haujapuuzwa. Pia, jambo la kufurahisha kukumbuka ni jinsi nafasi nyeupe zinavyopunguzwa na amri ya kusoma. Njia rahisi ya kupuuza mistari tupu unaposoma maudhui ya faili ni kutumia opereta ya majaribio yenye alama ya -z ambayo hukagua ikiwa urefu wa kamba ni sifuri. Sasa hebu turudie mfano sawa lakini wakati huu na operator wa mtihani.

while read LREAD
do
    if [[ ! -z $LREAD ]]
    then
        echo ${LREAD} 
    fi
done < testfile

Sasa kutoka kwa pato, unaweza kuona mistari tupu imepuuzwa.

Wahusika wa Escape

Herufi za Escape kama vile \n, \t, \c hazitachapishwa wakati wa kusoma faili. Ili kuonyesha hii ninatumia sampuli ya faili ambayo ina herufi chache za kutoroka.

while read LREAD
do
    echo ${LREAD}
done < testfile

Unaweza kuona kutoka kwa vibambo vya kutoroka vimepoteza maana na ni n na t pekee ndizo zimechapishwa badala ya \n na \t. Unaweza kutumia -r kuzuia tafsiri ya backslash.

while read -r LREAD
do
    echo ${LREAD}
done < testfile

Hiyo ni kwa makala hii. Tungependa kusikia kutoka kwako ikiwa kuna maoni au vidokezo. Maoni yako ndiyo hutusaidia kuunda maudhui bora. Endelea kusoma na uendelee kuunga mkono.