подскажите с grep и awk

Простые/общие вопросы по UNIX системам. Спросите здесь, если вы новичок

Модераторы: vadim64, terminus

Правила форума
Убедительная просьба юзать теги [cоde] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
QweЯty
лейтенант
Сообщения: 795
Зарегистрирован: 2010-10-12 0:15:15
Откуда: Таганрог, Калининград
Контактная информация:

подскажите с grep и awk

Непрочитанное сообщение QweЯty » 2012-06-21 20:17:02

есть такое:

Код: Выделить всё

> sockstat | grep java | awk '{print $3}'
6539
6539
6539
6539
6539
6526
6526
6526
6526
6526
5704
5704
5704
5704
5704
5704
5704
можно ли как нибудь получить не повторяющие, просто три числа 5704 6526 6539
Инженер не смотрит порно. Он ведет расчет бабы на усталость © Федор Сумкин
Изображение

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
f_andrey
майор
Сообщения: 2651
Зарегистрирован: 2007-12-26 1:22:58
Откуда: СПб
Контактная информация:

Re: подскажите с grep и awk

Непрочитанное сообщение f_andrey » 2012-06-21 20:26:59

sort, uniq?
Если ваша тема перенесена, то смотри http://forum.lissyara.su/viewtopic.php?f=1&t=32308

Аватара пользователя
QweЯty
лейтенант
Сообщения: 795
Зарегистрирован: 2010-10-12 0:15:15
Откуда: Таганрог, Калининград
Контактная информация:

Re: подскажите с grep и awk

Непрочитанное сообщение QweЯty » 2012-06-21 20:53:19

шшпасибо..
Инженер не смотрит порно. Он ведет расчет бабы на усталость © Федор Сумкин
Изображение

Аватара пользователя
QweЯty
лейтенант
Сообщения: 795
Зарегистрирован: 2010-10-12 0:15:15
Откуда: Таганрог, Калининград
Контактная информация:

Re: подскажите с grep и awk

Непрочитанное сообщение QweЯty » 2012-06-21 21:32:53

не хоччется новую тему создавать....

чем можно заменить слово на другое в куче файлов?

sed'ом пробовал, он только удалять мастак... а заменить - нет :(
слов в файлах куча. и куча файлов :(
Инженер не смотрит порно. Он ведет расчет бабы на усталость © Федор Сумкин
Изображение

Аватара пользователя
QweЯty
лейтенант
Сообщения: 795
Зарегистрирован: 2010-10-12 0:15:15
Откуда: Таганрог, Калининград
Контактная информация:

Re: подскажите с grep и awk

Непрочитанное сообщение QweЯty » 2012-06-21 21:40:21

есть вот такое

Код: Выделить всё

<ingredient id="57" count="50000000"/>
вот это 50000000 надо заменить на другое число...
но оябзательно после id="57"
Инженер не смотрит порно. Он ведет расчет бабы на усталость © Федор Сумкин
Изображение

spf
ефрейтор
Сообщения: 56
Зарегистрирован: 2009-11-05 15:28:46

Re: подскажите с grep и awk

Непрочитанное сообщение spf » 2012-06-22 7:42:54

Например, заменить на 20

Код: Выделить всё

sed 's/\(id="57" count="\)[0-9]*/\120/' file

Аватара пользователя
QweЯty
лейтенант
Сообщения: 795
Зарегистрирован: 2010-10-12 0:15:15
Откуда: Таганрог, Калининград
Контактная информация:

Re: подскажите с grep и awk

Непрочитанное сообщение QweЯty » 2012-06-23 19:49:23

можете подсказать, что не так?

Код: Выделить всё

#!/bin/sh

for i in `find . -name "*.xml" -exec grep -H 'ingredient id="57"' {} ; | awk -F":" `{print $1}` | xargs`; do sed -i `` `s/ingredient id="57"/ingredient id="3742"/g` $i; done
пишет:
> ./sh.sh
./sh.sh: 1: Syntax error: "|" unexpected
./sh.sh: 3: Syntax error: Error in command substitution
Инженер не смотрит порно. Он ведет расчет бабы на усталость © Федор Сумкин
Изображение

Аватара пользователя
QweЯty
лейтенант
Сообщения: 795
Зарегистрирован: 2010-10-12 0:15:15
Откуда: Таганрог, Калининград
Контактная информация:

Re: подскажите с grep и awk

Непрочитанное сообщение QweЯty » 2012-06-23 20:13:54

переделал до:

Код: Выделить всё

> cat sh1.sh
#!/bin/sh

for i in `find . -name "*.xml" -exec grep -H 'ingredient id="5962"' {} \; | awk '{print $1}' | xargs` ; do sed `s/ingredient id="5962"/ingredient id="57"/g` $i ;
пишет

Код: Выделить всё

> ./sh1.sh
./sh1.sh: s/ingredient: not found
sed: 1: "./382.xml:": invalid command code .
./sh1.sh: s/ingredient: not found
sed: 1: "./382.xml:": invalid command code .
./sh1.sh: s/ingredient: not found
sed: 1: "./382.xml:": invalid command code .
...
./sh1.sh: s/ingredient: not found
sed: 1: "./383.xml:": invalid command code .
./sh1.sh: s/ingredient: not found
sed: 1: "./383.xml:": invalid command code .
./sh1.sh: s/ingredient: not found
sed: 1: "./383.xml:": invalid command code .
./sh1.sh: s/ingredient: not found
sed: 1: "./383.xml:": invalid command code .
./sh1.sh: s/ingredient: not found
sed: 1: "./383.xml:": invalid command code .
./sh1.sh: s/ingredient: not found
пробел...

Код: Выделить всё

sed `s/ingredient\ id="5962"/ingredient\ id="57"/g`
но все равно таже ошибка..

Код: Выделить всё

sed: 1: "./383.xml:": invalid command code .
./sh1.sh: s/ingredient id=5962/ingredient id=57/g: not found
sed: 1: "./383.xml:": invalid command code .
./sh1.sh: s/ingredient id=5962/ingredient id=57/g: not found
sed: 1: "./383.xml:": invalid command code .
Инженер не смотрит порно. Он ведет расчет бабы на усталость © Федор Сумкин
Изображение

Аватара пользователя
QweЯty
лейтенант
Сообщения: 795
Зарегистрирован: 2010-10-12 0:15:15
Откуда: Таганрог, Калининград
Контактная информация:

Re: подскажите с grep и awk

Непрочитанное сообщение QweЯty » 2012-06-23 20:20:53

да, забыл что sed потоковый..
а как сделать
чтота типа:

Код: Выделить всё

sed `s/ingredient\ id="5962"/ingredient\ id="57"/g` $i > $i_1
где _1 дописывается к переменной...
Инженер не смотрит порно. Он ведет расчет бабы на усталость © Федор Сумкин
Изображение

Аватара пользователя
QweЯty
лейтенант
Сообщения: 795
Зарегистрирован: 2010-10-12 0:15:15
Откуда: Таганрог, Калининград
Контактная информация:

Re: подскажите с grep и awk

Непрочитанное сообщение QweЯty » 2012-06-23 20:52:16

и awk чего то не понимает -F"/" или "./"
чтобы без ./ показывало...

он при таком непоказывает НИЧЕГО :(

правда если -F"."
то тогда так

Код: Выделить всё

/383
/383
/383
/383
/383
/383
/383
заработал:

Код: Выделить всё

> cat sh1.sh
#!/bin/sh

for i in `find . -name "*.xml" -exec grep -H 'ingredient id="5962"' {} \; | awk -F":" '{print $1}' | xargs` ; do sed 's/ingredient\ id=\"5962\"/ingredient\ id=\"57\"/g' $i ;
done
Инженер не смотрит порно. Он ведет расчет бабы на усталость © Федор Сумкин
Изображение

Аватара пользователя
QweЯty
лейтенант
Сообщения: 795
Зарегистрирован: 2010-10-12 0:15:15
Откуда: Таганрог, Калининград
Контактная информация:

Re: подскажите с grep и awk

Непрочитанное сообщение QweЯty » 2012-06-23 21:04:04

не изменяет оригинал,
а как добавить к перменой $i _1 я хз как :(
Инженер не смотрит порно. Он ведет расчет бабы на усталость © Федор Сумкин
Изображение

Аватара пользователя
QweЯty
лейтенант
Сообщения: 795
Зарегистрирован: 2010-10-12 0:15:15
Откуда: Таганрог, Калининград
Контактная информация:

Re: подскажите с grep и awk

Непрочитанное сообщение QweЯty » 2012-06-24 4:31:59

Код: Выделить всё

#!/bin/sh

for i in `find . -name "*.xml" -exec grep -H 'ingredient id="5962"' {} \; | awk -F":" '{print $1}' | xargs` ; do sed 's/ingredient\ id=\"5962\"/ingredient\ id=\"57\"/g' $i >> $i'_1' | echo $i'_1';
показывает что $i все таки изменилось :)
./383.xml_1
./383.xml_1
если

Код: Выделить всё

sed 's/ingredient\ id=\"5962\"/ingredient\ id=\"57\"/g' ./383.xml >> ./383.xml_1
вручную в консоли - все ок.
а скрипт отрабатывает, но ничего не нет...
Инженер не смотрит порно. Он ведет расчет бабы на усталость © Федор Сумкин
Изображение

Аватара пользователя
QweЯty
лейтенант
Сообщения: 795
Зарегистрирован: 2010-10-12 0:15:15
Откуда: Таганрог, Калининград
Контактная информация:

Re: подскажите с grep и awk

Непрочитанное сообщение QweЯty » 2012-06-24 11:36:07

сделал....

все делов том что find выдавал один и тот же файл по несколько раз. применил uniq из первых постов :)

Код: Выделить всё

> cat sh.sh
#!/bin/sh

for i in `find . -name "*.xml" -exec grep -H 'ingredient id="5962"' {} \; | awk -F":" '{print $1}' | uniq | xargs` ; do `sed 's/ingredient\ id=\"5962\"/ingredient\ id=\"57\"/g' $i >> $i'_1' | mv $i'_1' $i `;

done
>
работает, так как нужно :)
Инженер не смотрит порно. Он ведет расчет бабы на усталость © Федор Сумкин
Изображение

Аватара пользователя
QweЯty
лейтенант
Сообщения: 795
Зарегистрирован: 2010-10-12 0:15:15
Откуда: Таганрог, Калининград
Контактная информация:

Re: подскажите с grep и awk

Непрочитанное сообщение QweЯty » 2012-06-30 16:52:58

spf писал(а):Например, заменить на 20

Код: Выделить всё

sed 's/\(id="57" count="\)[0-9]*/\120/' file
когда вручную задаешь все работает.

когда в скрипте:

Код: Выделить всё

> cat sh.sh
#!/bin/sh

#for i in `find . -name "*.xml" -exec grep -H 'ingredient id="4037"' {} \; | awk -F":" '{print $1}' | uniq | xargs` ; do `sed 's/ingredient\ id=\"4037\"/ingredient\ id=\"57\"/g' $i >> $i'_1' | mv $i'_1' $i `;
#
#done

for i in `find . -name "*.xml" -exec grep -H 'ingredient id="57"' {} \; | awk -F":" '{print $1}' | uniq | xargs` ; do `sed 's/\(ingredient id="57" count="\)[0-9]*/\110/' $i >> $i'_1' | mv $i'_1' $i `;

done
то нифига...
могут как то () влиять на это?

UPD
нашел.

Код: Выделить всё

for i in `find . -name "*.xml" -exec grep -H 'ingredient id="57"' {} \; | awk -F":" '{print $1}' | uniq | xargs` ; do `sed 's/\(ingredient\ id=\"57\"\ count=\"\)[0-9]*/\110/' $i >> $i'_1' | mv $i'_1' $i `;
все робит.
Инженер не смотрит порно. Он ведет расчет бабы на усталость © Федор Сумкин
Изображение