![]() |
Shell. Чтение текстового файла по строкам.
Подскажите как можно прочитать текстовый файл по строкам и в зависимости от значения строки, делать с ней разные вещи. Ну например, кидать в другой файл, присваивать значение строки переменной ит.д.
|
awk, sed, perl
|
#!/bin/bash
cat file_name | while read str; do if [ "$str" = "1"]; then .... elif [ "$str" = "bla-bla" ]; then .... fi done |
Чей-то не работает
cat /remote/ad/test | while read bb; do if [[ "$bb" == "dn:" ]] ; then echo 11; else echo $bb; fi; done так вот он ерту dn: никогда не находит, хотя половина строк начинается на dn:, и всегда выдает строку. |
== - нефига не поиск образца...
как вариант: cat /remote/ad/test | while read bb; do if [ `echo $str | grep dn:` ] ; then echo 11; else echo $bb; fi; done |
вместо $str - $bb ...
|
О! Заработало! Токмо скобки двойные, но енто наверно приблуда bash-а.
|
А как сделать, чтобы она к строковой переменной добавляла другую строковую переменну.
Типа если да, то Х=$Y иначе X=$X+";"+$Y. Т.е. это так хочется, но не получается. |
Интересно. Когда я в консоли напрямую делаю
x=12345 y=67890 z=$x$y echo $z дает 1234567890 а когда в скрипте, то вторая переменная пишется поверх первой. |
Короче в файле есть строки типа 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 |
c="$x;$c"
??? |
Это я ужо пробовал. Не помогает.
|
Время: 20:09. |
Время: 20:09.
© OSzone.net 2001-