The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"разбор строки"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Программирование под UNIX (Shell скрипты)
Изначальное сообщение [ Отслеживать ]

"разбор строки"  +/
Сообщение от qwertEHOK (ok) on 20-Окт-11, 19:24 
помогите, пожалуйста, со скриптом
(система Sco unix)

есть довольно большой файлик с таким содержимым
|Иванов Иван Иванович|город Москва|дом 3| |принято|


нужно взять текст между || и присвоить переменной
количество полей около 20
есть пустые строки

ЗЫ
раньше делал как то так
for fname in `cat list_dbf`
do
area=`echo $fname | cut -c 1-3
...
но тут столкнулся с пробелами. да и размер разный

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "разбор строки"  +/
Сообщение от Zl0 (ok) on 20-Окт-11, 19:33 
>[оверквотинг удален]
> нужно взять текст между || и присвоить переменной
> количество полей около 20
> есть пустые строки
> ЗЫ
> раньше делал как то так
> for fname in `cat list_dbf`
> do
>  area=`echo $fname | cut -c 1-3
> ...
> но тут столкнулся с пробелами. да и размер разный

   area=`echo $fname | cut -d "|" -f 1

-f n  номер столбца

man cut

еще можно перед открытием делать grep -v ^$  чтобы избавится от пустых строк

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "разбор строки"  +/
Сообщение от qwertEHOK (ok) on 20-Окт-11, 19:41 

>    area=`echo $fname | cut -d "|" -f 1
> -f n  номер столбца
> man cut
> еще можно перед открытием делать grep -v ^$  чтобы избавится от
> пустых строк

делаю так
if [ -s itog.unl ]; then
    for fname in `cat itog.unl`
        do
            pole1=`echo $fname|cut -f 1 -d\|`
            echo $pole1
            pole2=`echo $fname|cut -f 2 -d\|`
            echo $pole2
exit
done
fi

Получается 2 раза фамилия


Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

3. "разбор строки"  +/
Сообщение от qwertEHOK (ok) on 20-Окт-11, 19:44 
а получается потому что пробел

я делал cut по 20 значным числам и все получалось, но тут ((((

Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

4. "разбор строки"  +/
Сообщение от Ager email on 20-Окт-11, 22:09 
если количество полей в строке фиксированное и разделитель - всегда  '|'   то  awk  Вам в руки :)  

З.Ы. что-то мне это напоминает выгруженную из Informix`а таблицу ...

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

5. "разбор строки"  +/
Сообщение от ACCA (ok) on 21-Окт-11, 01:27 
#!/bin/bash
IFS='|'
while read fname
do
   while read -a FLD
   do
      echo ${FLD[1]}, ${FLD[2]}
   done < $fname
done < list_dbf
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

6. "разбор строки"  +/
Сообщение от qwertEHOK (ok) on 21-Окт-11, 11:03 
> #!/bin/bash
> IFS='|'
> while read fname
> do
>    while read -a FLD
>    do
>       echo ${FLD[1]}, ${FLD[2]}
>    done < $fname
> done < list_dbf

выдает всю строку и пишет cannot open

Ответить | Правка | ^ к родителю #5 | Наверх | Cообщить модератору

12. "разбор строки"  +/
Сообщение от Andrey Mitrofanov on 26-Окт-11, 20:24 
>> #!/bin/bash
>> IFS='|'
> выдает всю строку и пишет cannot open

УМВР, ЧЯДНТ? //bash. я предупредил.

$ t() { echo '|Иванов Иван Иванович|город Москва|дом 3| |принято|'; }
$ IFS=\| a=(`t`)
$ for((i=0;i<${#a[*]};i++)); do echo "$i. '${a[$i]}'"; done
0. ''
1. 'Иванов Иван Иванович'
2. 'город Москва'
3. 'дом 3'
4. ' '
5. 'принято'
$ _

Ответить | Правка | ^ к родителю #6 | Наверх | Cообщить модератору

7. "разбор строки"  +/
Сообщение от qwertEHOK (ok) on 21-Окт-11, 11:47 
> помогите, пожалуйста, со скриптом
> (система Sco unix)
> есть довольно большой файлик с таким содержимым
> |Иванов Иван Иванович|город Москва|дом 3| |принято|
> нужно взять текст между || и присвоить переменной
> количество полей около 20
> есть пустые строки

Ладно, тогда подскажите как все пробелы заменить на ХХХ
Лучше функцией

спасибо

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

8. "разбор строки"  +/
Сообщение от stereoPANDA email on 21-Окт-11, 12:29 
>> помогите, пожалуйста, со скриптом
>> (система Sco unix)
>> есть довольно большой файлик с таким содержимым
>> |Иванов Иван Иванович|город Москва|дом 3| |принято|
>> нужно взять текст между || и присвоить переменной
>> количество полей около 20
>> есть пустые строки
> Ладно, тогда подскажите как все пробелы заменить на ХХХ
> Лучше функцией
> спасибо

sed 's/ /XXX/g'

Ответить | Правка | ^ к родителю #7 | Наверх | Cообщить модератору

9. "разбор строки"  +/
Сообщение от qwertEHOK (ok) on 21-Окт-11, 12:37 
всем спасибо

решил так

obr()
{
ff=`echo $1|cut -f $2 -d\|`
pole=`echo $ff|sed "s/ЪЩЪ/ /g"`
}

for fname in `cat itog.unl | sed "s/ /ЪЩЪ/g"`
do
    obr $fname 1
    echo $pole

    exit # для тестирования
done

заменяем пробелы на УНИКАЛЬНЫЕ символы
берем 1 строку
берем данные до первого |
удаляем уникальные символы

вроде хорошо ... но

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

10. "разбор строки"  +/
Сообщение от Аноним (??) on 26-Окт-11, 05:40 
ППЦ какой то :( Ох доберётся до вас гроза студней Андрей Митрофанов !

А вот так нельзя?

v@debian:~/work$ cat itog.unl
|Иванов Иван Иванович|город Москва|дом 3| |принято|
v@debian:~/work$ cat itog.unl | awk -v fld=2 'BEGIN {FS="|";} {print $fld;}'
Иванов Иван Иванович
v@debian:~/work$ cat itog.unl | awk -v fld=3 'BEGIN {FS="|";} {print $fld;}'
город мАсЬква
       ^^^ хумор такой :)
v@debian:~/work$ cat itog.unl | awk -v fld=6 'BEGIN {FS="|";} {print $fld;}'
принято

Ну и:
v@debian:~/work$ cat itog.unl | awk -v fld=500 'BEGIN {FS="|";} {print $fld;}'

v@debian:~/work$

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

11. "разбор строки"  +/
Сообщение от Ager email on 26-Окт-11, 13:28 
я предлогал использовать awk    но товарисч не ищет легких путей :)     видимо, в постановке задачи сказано - юзать awk - низзя :)      а огород из cut sed  - самое оно ....
Ответить | Правка | ^ к родителю #10 | Наверх | Cообщить модератору

13. "разбор строки"  +/
Сообщение от Andrey Mitrofanov on 26-Окт-11, 21:39 
> ППЦ какой то :( Ох доберётся до вас гроза студней Андрей Митрофанов !

Не-а, у Митрофанова "другие проблемы", а Ж)) в постановке "со скриптом (система Sco unix)" - 1. мы все %) проиграли; 2. гуглить: позиксвей site:opennet.ru

Ответить | Правка | ^ к родителю #10 | Наверх | Cообщить модератору

14. "разбор строки"  +/
Сообщение от Ager email on 26-Окт-11, 23:24 
> в постановке "со скриптом (система Sco unix)" - 1. мы все %) проиграли

гы :)  как раз на SCO v3\v5 я и использовал awk в полный рост :)
а вот про cut узнал уже только на Linux`е ...

Ответить | Правка | ^ к родителю #13 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру