Różne sposoby czytania pliku w skrypcie Bash za pomocą pętli

Różne sposoby czytania pliku w skrypcie Bash za pomocą pętli

W tym artykule dotyczy tego, jak czytać pliki w skryptach bash za pomocą podczas pętli. Czytanie pliku jest powszechną operacją w programowaniu. Powinieneś zapoznać się z różnymi metodami, a jaką metodą jest bardziej wydajna w użyciu. W Bash jedno zadanie można osiągnąć na wiele sposobów, ale zawsze istnieje optymalny sposób na wykonanie zadania i powinniśmy go śledzić.

Przed zobaczeniem, jak odczytać zawartość pliku za pomocą podczas pętli, Szybki podkład na temat pracy w pętli. Podczas gdy Loop ocenia warunek i itera nad danym zestawem kodów, gdy warunek jest prawdziwy.

podczas gdy [warunek] wykonaj blok kodu 

Podzielmy podczas pętli składnia.

  • podczas pętli powinno zacząć od czasu, po którym następuje słowo kluczowe, a następnie warunek.
  • A stan powinno być zamknięte wewnątrz [] [] Lub [[]]. Warunek powinien zawsze zwrócić prawdziwe, aby pętla została wykonana.
  • Rzeczywisty blok kodu zostanie umieszczony między Do I zrobione.
Liczba = 0, podczas gdy [[$ numer -le 10]] echo "Welcome $ liczba czasy" ((numer ++)) 
Podczas pętli

To bardzo prosty przykład, w którym pętla Wykonuje się aż do NUMER nie jest większe niż 10 i drukuje instrukcję echo.

Wraz z chwila użyjemy Czytać polecenie do odczytania zawartości wiersza pliku po wierszu. Poniżej znajduje się składnia sposobu chwila I Czytać Polecenia są łączone. Teraz istnieją różne sposoby przekazywania pliku jako wejścia i zobaczymy je wszystkie.

# Składnia podczas odczytu zmiennej do wykonania kodu 

Ruruk w Linux

Zwykle użyjemy polecenia CAT, aby wyświetlić zawartość pliku z terminalu. Ponadto, zbijemy moc wyjściową polecenie CAT do innych poleceń, takich jak grep, sort itp.

Podobnie użyjemy polecenie CAT tutaj, aby odczytać zawartość pliku i przejrzeć ją do chwila pętla. Do demonstracji używam /etc/passwd Plik, ale nie jest wskazane, aby zadzierać z tym plikami, więc weź kopię zapasową tego pliku i odtwarzaj go, jeśli tak chcesz.

Cat /itp. /Passwd | podczas czytania lread echo $ lread gotowe 
Ruruk w Linux

Rozbijmy to, co stanie się po przesłaniu powyższego kodu.

  • cat /etc /passwd odczytuje zawartość pliku i przekazuje ją jako wejście przez rurę.
  • Czytać polecenie odczytuje każdy wiersz przekazany jako wejście z polecenia CAT i przechowuje ją w LREAD zmienny.
  • Czytać Polecenie będzie odczytać zawartość pliku do czasu Eol jest interpretowany.

Możesz także użyć innych poleceń, takich jak głowa, ogon i przewód do pobytu.

głowa -n 5 /etc /passwd | podczas czytania lread echo $ lread gotowe 
Polecenie głowy

Przekierowanie wejściowe w Linux

Możemy przekierować zawartość pliku do podczas pętli Korzystanie z operatora przekierowania wejściowego (<).

podczas czytania lread echo $ lread gotowe < /etc/passwd | head -n 5 
Przekierowanie wejściowe

Możesz także przechowywać nazwę pliku do zmiennej i przekazać operator przekierowania.

Filename = "/etc/passwd" podczas przeczytania lread do echo $ lread < $FILENAME 
Przechowuj nazwę pliku w zmiennej

Możesz także przekazać nazwy plików jako argument do swojego skryptu.

podczas czytania lread echo $ lread gotowe < $1 | head -n 5 
Przechowuj nazwę pliku jako argument

Wewnętrzny separator pola

Możesz pracować z różnymi typami formatów plików (CSV, tekst, JSON) i możesz podzielić zawartość pliku na podstawie niestandardowego ogranicznika. W takim przypadku możesz użyć „Wewnętrzny separator pola (IFS)”Aby podzielić zawartość pliku i przechowywać ją w zmiennych.

Pozwól mi pokazać, jak to działa. Spójrz na /etc/passwd plik, który ma dwukropek (:) jako ogranicznik. Możesz teraz podzielić każde słowo z linii i przechowywać je w osobnej zmiennej.

W poniższym przykładzie dzieliję /etc/passwd plik z okrężnicą jako mój separator i przechowywanie każdego podziału na różne zmienne.

While ifs = ":" Czytaj a b c d e f g do echo $ a echo $ b echo $ c echo $ d echo $ e echo $ f echo $ g gotowe < /etc/passwd 
Wewnętrzny separator pola

Wyświetlałem tylko jedną linię podzieloną na powyższym zrzucie ekranu, biorąc pod uwagę rozmiar zrzutu ekranu.

Puste linie w Linux

Puste linie nie są ignorowane, gdy ty pętla Za pośrednictwem zawartości pliku. Aby to zademonstrować, utworzyłem przykładowy plik z poniższą zawartością. Istnieją 4 linie i kilka pustych linii, prowadząca biała, trwająca biała przestrzeń, postacie z zakładki w wierszu 2 i niektóre postacie ucieczki (\N I \T).

Plik z pustymi wierszami
podczas czytania lread echo $ lread gotowe < testfile 
Pusta linia nie ignorowana

Zobacz wynik, pusta linia nie jest ignorowana. Interesującą rzeczą do odnotowania jest to, w jaki sposób białe przestrzenie są przycięte przez Czytać Komenda. Prostym sposobem ignorowania pustych wierszy podczas czytania zawartości pliku jest użycie operatora testowego z -z flaga, która sprawdza, czy długość ciągu wynosi zero. Teraz powtórzmy ten sam przykład, ale tym razem z operatorem testowym.

Podczas czytania LRead do [[[[ ! -z $ lread]] następnie echo $ lRead fi gotowe < testfile 
Puste linie ignorowane

Teraz z wyjścia można zobaczyć, jak puste linie są ignorowane.

Escape Postacie

Escape Postacie jak \N, \T, \C nie zostanie wydrukowany podczas czytania pliku. Aby to zademonstrować, używam tego samego przykładowego pliku, który ma kilka znaków ucieczki.

Plik z znakami ucieczki
podczas czytania lread echo $ lread gotowe < testfile 
Postać ucieczki w Linux

Możesz zobaczyć z wyjściowych znaków ucieczki, straciły swoje znaczenie i tylko N I T są drukowane zamiast \N I \T. Możesz użyć -R Aby zapobiec interpretacji wstecznych.

Podczas czytania -r lread echo $ lread gotowe < testfile 
Zapobiegaj interpretacji wstecznych

To wszystko dla tego artykułu. Chcielibyśmy wysłuchać od ciebie, jeśli są jakieś informacje zwrotne lub wskazówki. Twoja opinia pomaga nam tworzyć lepszą treść. Czytaj dalej i wspieraj.