Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Общий по Linux (http://forum.oszone.net/forumdisplay.php?f=9)
-   -   Shell. Чтение текстового файла по строкам. (http://forum.oszone.net/showthread.php?t=47749)

Delphin911 07-04-2005 10:25 313622

Shell. Чтение текстового файла по строкам.
 
Подскажите как можно прочитать текстовый файл по строкам и в зависимости от значения строки, делать с ней разные вещи. Ну например, кидать в другой файл, присваивать значение строки переменной ит.д.

archy 07-04-2005 11:58 313640

awk, sed, perl

g613 07-04-2005 12:06 313642

#!/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 313651

Чей-то не работает

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 313657

== - нефига не поиск образца...
как вариант:

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 313658

вместо $str - $bb ...

Delphin911 07-04-2005 13:23 313662

О! Заработало! Токмо скобки двойные, но енто наверно приблуда bash-а.

Delphin911 07-04-2005 15:21 313704

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

Delphin911 07-04-2005 16:00 313720

Интересно. Когда я в консоли напрямую делаю

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

Delphin911 07-04-2005 16:20 313731

Короче в файле есть строки типа 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 313753

c="$x;$c"
???

Delphin911 07-04-2005 17:58 313754

Это я ужо пробовал. Не помогает.


Время: 19:18.

Время: 19:18.
© OSzone.net 2001-