Articles

Zapętlenie zawartości pliku w Bash

często wymagane jest odczytanie każdej linii z pliku za pomocą skryptu bash. Istnieją różne podejścia do odczytu linii tworzących plik. W poniższym przykładzie najpierw opisaliśmy, jak utworzyć przykładowy plik, a następnie uruchomić skrypt odczytujący ten przykładowy plik.

Utwórz plik do odczytu

# Open vi Editorvi a_file.txt# Input the below linesMondayTuesdayWednesdayThursdayFridaySaturdaySunday# cat the filecat a_file.txt

uruchomienie powyższego kodu daje nam następujący wynik −

MondayTuesdayWednesdayThursdayFridaySaturdaySunday

używając do-While

w tym podejściu używamy pętli do-while do odczytu pliku., Podajemy nazwę pliku jako wejście na końcu pliku. Najpierw tworzymy skrypt i dajemy do niego uprawnienia execute. Wtedy tylko on może odczytać plik i pokazać wynik.

#!/bin/bashwhile read LINEdo echo "$LINE"done < a_file.txt

uruchomienie powyższego kodu daje nam następujący wynik −

MondayTuesdayWednesdayThursdayFridaySaturdaySunday

używając for I in

w następnym podejściu używamy pętli for wraz z klauzulą in. Tutaj przechowujemy wynik polecenia cat (który jest każdą linią) w zmiennej będącej częścią pętli for I echo zmiennej.,

#!/bin/bashfile=a_file.txtfor i in `cat $file`doecho "$i"done

uruchomienie powyższego kodu daje nam następujący wynik −

MondayTuesdayWednesdayThursdayFridaySaturdaySunday

tylko echo

możemy również uzyskać zawartość pliku używając tylko echo. Ale wynik wyjdzie jako tablica linii i wydrukowany jako jednoliniowe wyjście pokazujące kombinację wszystkich linii.

echo $( < a_file.txt )

uruchomienie powyższego kodu daje nam następujący wynik:

Monday Tuesday Wednesday Thursday Friday Saturday Sunday

odczyt pliku z pustymi liniami

Jeśli plik ma jakieś wiersze, które są puste, unikamy ich w wyniku za pomocą następującego kodu., W ten sposób IFS (wewnętrzny Separator pól) jest ustawiony na pusty ciąg znaków, tak że puste linie są traktowane jako separator pól i unikane na wyjściu. Zakładając, że między 3. A 4. linią są puste linie, te puste zastawy nie zostaną wydrukowane.

#!/bin/bashwhile IFS = read -r LINEdo echo "$LINE"done < a_file.txt

uruchomienie powyższego kodu daje nam następujący wynik −

MondayTuesdayWednesdayThursdayFridaySaturdaySunday

Opublikowano dnia 03-Jan-2020 11:45:05