Portál AbcLinuxu, 1. listopadu 2025 01:49
POLE=("aaaaaaaaaa"
"bbbbbbbbbb"
"cccccccccc"
"dddddddddd"
"eeeeeeeeee"
"ffffffffff"
"gggggggggg"
"hhhhhhhhhh"
"iiiiiiiiii")
Když je proměnná
VOLBA=0
aaaaaaaaaa
bbbbbbbbbb
Když je proměnná
VOLBA=1
aaaaaaaaaa
bbbbbbbbbb
cccccccccc
Když je proměnná
VOLBA=2
bbbbbbbbbb
cccccccccc
dddddddddd
Když je proměnná
VOLBA=3
cccccccccc
dddddddddd
eeeeeeeeee
Když je proměnná
VOLBA=4
dddddddddd
eeeeeeeeee
ffffffffff
Když je proměnná
VOLBA=5
eeeeeeeeee
ffffffffff
gggggggggg
Řešení dotazu:
for cisloriadku v range(0-pocetriadkov):
ak $cisloriadku=>VOLBA-1 a $cisloriadku<=VOLBA+1:
vypis $riadok
Samozrejme predpokladám že prvy riadok ma poradové číslo 0.
test "$VOLBA" -gt 0 && echo ${POLE[$(($VOLBA-1))]}
echo ${POLE[$VOLBA]}
test "$VOLBA" -lt $((${#POLE[@]}-1)) && echo ${POLE[$(($VOLBA+1))]}
Může-li $VOLBA obsahovat divoké hodnoty úplně mimo rozsah, je zapotřebí testovat jak horní tak spodní rozsah při každém výpisu, ale to už lze snadno úpravou uvedeného...
head -n $((VOLBA+2)) soubor.txt | tail -n 3
$VOLBA aspoň o dva menší než počet řádků.
awk "NR>=$VOLBA && NR<=$VOLBA+2 {print}"
awk "NR>=$VOLBA && NR<=$VOLBA+2 {print}" soubor.txt
nebo přes standardní vstup
awk "NR>=$VOLBA && NR<=$VOLBA+2 {print}" <soubor.txt
nebo přes rouru
producent | awk "NR>=$VOLBA && NR<=$VOLBA+2 {print}"
To jsou základní způsoby, které se u filtrů obvykle používají.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.