Efektywnie czytanie wiersza pliku w linii w skrypcie powłoki
- 2043
- 466
- Tacjana Karpiński
Odczytanie wiersza pliku według linii jest powszechnym zadaniem w wielu scenariuszach powłoki, ponieważ pozwala przetwarzać każdą wiersz pliku osobno i wykonywać działania na podstawie zawartości każdej linii. Istnieje kilka sposobów odczytania wiersza plików po linii w skrypcie Linux Shell, ale niektóre metody są bardziej wydajne niż inne. W tym artykule zbadamy niektóre z najbardziej wydajnych sposobów odczytania wiersza pliku według linii w skrypcie Linux Shell.
Używając pętli
Najbardziej podstawowym sposobem odczytania wiersza pliku po wierszu w skrypcie powłoki jest użycie pętli white i polecenia odczytu. Polecenie odczytu odczytuje wiersz wejścia z pliku i przechowuje go w zmiennej, która może być przetwarzana przez skrypt. Pętla While pozwala iterować linie pliku do końca końca. Oto przykład tego, jak to może wyglądać:
#!/usr/bin/env bash # odczyt wiersz pliku według linii podczas linii odczytu; DO # PROCES SILL LINE CONTET ECHO „$ LINE” gotowe < file.txt1234567 | #!/usr/bin/env bash # odczyt wiersz pliku według linii odczytu linii; DO # PROCES SILL LINE CONTET ECHO „$ LINE” gotowe < file.txt |
Ta metoda jest prosta i łatwa do zrozumienia, ale ma pewne ograniczenia. Jednym ograniczeniem jest to, że polecenie odczytu może odczytać tylko jeden wiersz na raz, dzięki czemu może być wolniejsze w przypadku dużych plików z wieloma wierszami. Ponadto polecenie odczytu może odczytać tylko ze standardowego wejścia (stdin), więc musisz użyć < operator to redirect the contents of the file to stdin. This can be inconvenient if you need to read from multiple files or if you want to read from a file that is not in the current directory.
Używając w pętli z CAT
Bardziej wydajnym sposobem odczytania wiersza pliku po wierszu w skrypcie powłoki jest użycie polecenia CAT w połączeniu z pętlą while. Polecenie CAT odczytuje plik i wysyła jego zawartość do stdout, co może być przetwarzane przez pętlę while. Oto przykład tego, jak to może wyglądać:
#!/usr/bin/env bash # odczyt wiersz pliku według linii podczas linii odczytu; DO # PROCES SILL LINE CONTET ECHO „$ LINE” gotowe < <(cat file.txt)1234567 | #!/usr/bin/env bash # odczyt wiersz pliku według linii odczytu linii; DO # PROCES SILL LINE CONTET ECHO „$ LINE” gotowe < <(cat file.txt) |
Ta metoda jest bardziej wydajna niż polecenie odczytu, ponieważ odczytuje cały plik w pamięci jednocześnie, zamiast czytać jeden wiersz na raz. Może to być szybsze dla dużych plików z wieloma wierszami. Ponadto polecenie CAT może odczytać z dowolnego pliku, nie tylko stdin, więc możesz go używać do odczytu z wielu plików lub plików, których nie ma w bieżącym katalogu.
Używając pętli z SED
Kolejnym wydajnym sposobem odczytania wiersza pliku po linii w skrypcie powłoki jest użycie polecenia SED w połączeniu z pętlą while. Polecenie SED to potężne narzędzie do przetwarzania tekstu, które może odczytać plik i wysyłać jego zawartość do stdout, jeden wiersz na raz. Oto przykład tego, jak to może wyglądać:
#!/usr/bin/env bash # odczyt wiersz pliku według linii podczas linii odczytu; DO # PROCES SILL LINE CONTET ECHO „$ LINE” gotowe < <(sed -n -e 1p file.txt)1234567 | #!/usr/bin/env bash # odczyt wiersz pliku według linii odczytu linii; DO # PROCES SILL LINE CONTET ECHO „$ LINE” gotowe < <(sed -n -e 1p file.txt) |
Ta metoda jest podobna do polecenia CAT, ale jest bardziej wydajna, ponieważ wyświetla tylko jedną linię na raz. Może to być szybsze dla dużych plików z wieloma wierszami. Ponadto polecenie SED ma wiele opcji i funkcji, których można użyć do manipulowania wyjściem, więc jest to bardzo elastyczne narzędzie do przetwarzania tekstu.
Podsumowując, istnieje kilka sposobów odczytania wiersza pliku według linii w skrypcie Linux Shell.
- « Data i godzina wyświetlania bash w określonym formacie
- Jak wyświetlić wyjście w tej samej linii w Python »