Войти

Показать полную графическую версию : Shell. Чтение текстового файла по строкам.


Delphin911
07-04-2005, 10:25
Подскажите как можно прочитать текстовый файл по строкам и в зависимости от значения строки, делать с ней разные вещи. Ну например, кидать в другой файл, присваивать значение строки переменной ит.д.

archy
07-04-2005, 11:58
awk, sed, perl

g613
07-04-2005, 12:06
#!/bin/bash
cat file_name | while read str; do
if [ "$str" = "1"]; then
....
elif [ "$str" = "bla-bla" ]; then
....
fi
done

Delphin911
07-04-2005, 12:34
Чей-то не работает

cat /remote/ad/test | while read bb; do if [[ "$bb" == "dn:" ]] ; then echo 11; else echo $bb; fi; done

так вот он ерту dn: никогда не находит, хотя половина строк начинается на dn:,
и всегда выдает строку.

g613
07-04-2005, 13:00
== - нефига не поиск образца...
как вариант:

cat /remote/ad/test | while read bb; do if [ `echo $str | grep dn:` ] ; then echo 11; else echo $bb; fi; done

g613
07-04-2005, 13:01
вместо $str - $bb ...

Delphin911
07-04-2005, 13:23
О! Заработало! Токмо скобки двойные, но енто наверно приблуда bash-а.

Delphin911
07-04-2005, 15:21
А как сделать, чтобы она к строковой переменной добавляла другую строковую переменну.
Типа если да, то Х=$Y иначе X=$X+";"+$Y. Т.е. это так хочется, но не получается.

Delphin911
07-04-2005, 16:00
Интересно. Когда я в консоли напрямую делаю

x=12345
y=67890
z=$x$y
echo $z дает 1234567890
а когда в скрипте, то вторая переменная пишется поверх первой.

Delphin911
07-04-2005, 16:20
Короче в файле есть строки типа dn: ........... и m: ........... А я хочу, чтобы эти строки выдавались в одну строку, скажем через ";" а dn: и m: убиралось.


#!/usr/bin/bash
cat /remote/ad/test | while read b
do
x=${b#*: }
if [[ `echo $b | grep dn:` ]]
then
echo $c
c=$x
else
c=$x";"$c
fi
done

И все бы хорошо но получается вот что

скажем x=1111111111 , c=222
а в итоге вместо 1111111111;222 мы получаем ;222111111

g613
07-04-2005, 17:53
c="$x;$c"
???

Delphin911
07-04-2005, 17:58
Это я ужо пробовал. Не помогает.




© OSzone.net 2001-2012