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

- 1178
- 69
- Pan Jeremiasz Więcek
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 ++))

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

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

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

Możesz także przechowywać nazwę pliku do zmiennej i przekazać operator przekierowania.
Filename = "/etc/passwd" podczas przeczytania lread do echo $ lread < $FILENAME

Możesz także przekazać nazwy plików jako argument do swojego skryptu.
podczas czytania lread echo $ lread gotowe < $1 | head -n 5

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

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).

podczas czytania lread echo $ lread gotowe < testfile

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

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.

podczas czytania lread echo $ lread gotowe < testfile

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

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.
- « LFCA Naucz się podstawowych poleceń zarządzania plikami w Linux - część 2
- Różne sposoby korzystania z polecenia kolumny w Linux »