URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 6888
[ Назад ]

Исходное сообщение
"скрипт"

Отправлено sweer , 27-Окт-07 18:25 
Имеется стандартный ввод:

vasya
pupkin
123

Нужно вылавливать число 123, а в вывод отправлять только имя Вася(что на 2 строчки выше).

Как это можно сделать на лету шеллом?


Содержание

Сообщения в этом обсуждении
"скрипт"
Отправлено L0n3R4ng3r , 27-Окт-07 22:06 
>Имеется стандартный ввод:
>
>vasya
>pupkin
>123
>
>Нужно вылавливать число 123, а в вывод отправлять только имя Вася(что на
>2 строчки выше).
>
>Как это можно сделать на лету шеллом?

#!/bin/bash
counter=1
flag=0
while [ "t" == "t" ] ;do
echo -n "Enter something:    "
read z
if [ $flag -eq 1 ]; then
    flag=0
fi
if [ "$z" == "123" ]; then
    echo $first
    flag=1
fi
if [ $flag -ne 1 ];then
cond=$(echo "$counter % 2" | bc)
case "$cond" in
1)    first=$z;;
0)    second=$z;;
esac
let counter=counter+1
fi

done


"скрипт"
Отправлено phpcoder , 29-Окт-07 14:27 
[...]
>Как это можно сделать на лету шеллом?

Много как, вариантов -- масса.

Вот, так, например, можно:

[c0der@rock ~]$ echo "vasya\npupkin\n123\nslava\nsemushin\n321\nivan\nivanov\n123"                      vasya
pupkin
123
slava
semushin
321
ivan
ivanov
123
[c0der@rock ~]$ echo "vasya\npupkin\n123\nslava\nsemushin\n321\nivan\nivanov\n123" | paste - - - | awk '{if($3=="123"){print $1}}'
vasya
ivan
[c0der@rock ~]$



"скрипт"
Отправлено cat , 29-Окт-07 17:57 
$ cat test
vasya
pupkin
123
$cat test | grep -B3 123 | head -1
vasya