Strona 1 z 1
bash i potoki
: 04 października 2017, 12:07
autor: aksnet
mam plik z danymi np. data.txt i skrypt format.sh
formatowanie danych uruchamiam tak:
skrypt format.sh czyta linia po linii plik data.sh przetwarza go
np. w pętli
czy po zakończeniu takiej pętli w skrypcie
jest jakaś możliwość czytania potoku znów od początku?
Re: bash i potoki
: 04 października 2017, 13:44
autor: dedito
Jak najbardziej, ta składnia wywołania jakaś dziwna.
Czemu w samym skrypcie nie zaciągasz tego pliku do formatowania?
Re: bash i potoki
: 04 października 2017, 14:09
autor: aksnet
Ty chyba powinno być oczywiste.
Po to żeby skrypt format.sh uruchomić dla dowolnego pliku
bez niepotrzebnego edytowania format.sh
Re: bash i potoki
: 04 października 2017, 14:14
autor: lizard
Możesz podać plik z danymi jako parametr skryptu "
format.sh data.txt" i odwoływać się do niego:
Kod: Zaznacz cały
InData="${1}"
while read Line; do
echo "${Line}"
done < "${InData}"
Możesz też czytać ze standardowego wejścia, jak do tej pory, a wszystko, co odczytasz zapisywać do pliku tymczasowego i sięgać, gdy zajdzie taka potrzeba:
Kod: Zaznacz cały
TmpFile="$(mktemp /tmp/format.sh-XXXX)"
> "${TmpFile}"
while read Line; do
echo "${Line}" >> "${TmpFile}"
:
done
while read Line; do
echo "${Line}"
done < "${TmpFile}"
:
rm -f "${TmpFile}"
:
Ciekawy pomysł na wielokrotne wykorzystanie w pętli ostatnio odczytanej linii jest ns
Stack Overflow:
Kod: Zaznacz cały
recycle=false
some_command | while $recycle || read line
do
if something then
read line
recycle=false
else
# how do I "unread"?
recycle=true
fi
done
Re: bash i potoki
: 04 października 2017, 14:22
autor: dedito
aksnet pisze: 04 października 2017, 14:09
Ty chyba powinno być oczywiste.
Po to żeby skrypt format.sh uruchomić dla dowolnego pliku
bez niepotrzebnego edytowania format.sh
Oczywiste to by było gdybyś wywoływał jak to @Lizard pokazał na przykładzie wywołania argumentu $1