помогите, пожалуйста, со скриптом
(система Sco unix)есть довольно большой файлик с таким содержимым
|Иванов Иван Иванович|город Москва|дом 3| |принято|
нужно взять текст между || и присвоить переменной
количество полей около 20
есть пустые строкиЗЫ
раньше делал как то так
for fname in `cat list_dbf`
do
area=`echo $fname | cut -c 1-3
...
но тут столкнулся с пробелами. да и размер разный
>[оверквотинг удален]
> нужно взять текст между || и присвоить переменной
> количество полей около 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 ^$ чтобы избавится от пустых строк
> 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 раза фамилия
а получается потому что пробеля делал cut по 20 значным числам и все получалось, но тут ((((
если количество полей в строке фиксированное и разделитель - всегда '|' то awk Вам в руки :)З.Ы. что-то мне это напоминает выгруженную из Informix`а таблицу ...
#!/bin/bash
IFS='|'
while read fname
do
while read -a FLD
do
echo ${FLD[1]}, ${FLD[2]}
done < $fname
done < list_dbf
> #!/bin/bash
> IFS='|'
> while read fname
> do
> while read -a FLD
> do
> echo ${FLD[1]}, ${FLD[2]}
> done < $fname
> done < list_dbfвыдает всю строку и пишет cannot open
>> #!/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. 'принято'
$ _
> помогите, пожалуйста, со скриптом
> (система Sco unix)
> есть довольно большой файлик с таким содержимым
> |Иванов Иван Иванович|город Москва|дом 3| |принято|
> нужно взять текст между || и присвоить переменной
> количество полей около 20
> есть пустые строкиЛадно, тогда подскажите как все пробелы заменить на ХХХ
Лучше функциейспасибо
>> помогите, пожалуйста, со скриптом
>> (система Sco unix)
>> есть довольно большой файлик с таким содержимым
>> |Иванов Иван Иванович|город Москва|дом 3| |принято|
>> нужно взять текст между || и присвоить переменной
>> количество полей около 20
>> есть пустые строки
> Ладно, тогда подскажите как все пробелы заменить на ХХХ
> Лучше функцией
> спасибоsed 's/ /XXX/g'
всем спасиборешил так
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 $poleexit # для тестирования
doneзаменяем пробелы на УНИКАЛЬНЫЕ символы
берем 1 строку
берем данные до первого |
удаляем уникальные символывроде хорошо ... но
ППЦ какой то :( Ох доберётся до вас гроза студней Андрей Митрофанов !А вот так нельзя?
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$
я предлогал использовать awk но товарисч не ищет легких путей :) видимо, в постановке задачи сказано - юзать awk - низзя :) а огород из cut sed - самое оно ....
> ППЦ какой то :( Ох доберётся до вас гроза студней Андрей Митрофанов !Не-а, у Митрофанова "другие проблемы", а Ж)) в постановке "со скриптом (система Sco unix)" - 1. мы все %) проиграли; 2. гуглить: позиксвей site:opennet.ru
> в постановке "со скриптом (система Sco unix)" - 1. мы все %) проигралигы :) как раз на SCO v3\v5 я и использовал awk в полный рост :)
а вот про cut узнал уже только на Linux`е ...