Страница 1 из 1

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

Добавлено: 2012-06-21 20:17:02
QweЯty
есть такое:

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

> 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

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

Добавлено: 2012-06-21 20:26:59
f_andrey
sort, uniq?

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

Добавлено: 2012-06-21 20:53:19
QweЯty
шшпасибо..

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

Добавлено: 2012-06-21 21:32:53
QweЯty
не хоччется новую тему создавать....

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

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

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

Добавлено: 2012-06-21 21:40:21
QweЯty
есть вот такое

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

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

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

Добавлено: 2012-06-22 7:42:54
spf
Например, заменить на 20

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

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

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

Добавлено: 2012-06-23 19:49:23
QweЯty
можете подсказать, что не так?

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

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

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

Добавлено: 2012-06-23 20:13:54
QweЯty
переделал до:

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

> 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 .

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

Добавлено: 2012-06-23 20:20:53
QweЯty
да, забыл что sed потоковый..
а как сделать
чтота типа:

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

sed `s/ingredient\ id="5962"/ingredient\ id="57"/g` $i > $i_1
где _1 дописывается к переменной...

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

Добавлено: 2012-06-23 20:52:16
QweЯty
и 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

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

Добавлено: 2012-06-23 21:04:04
QweЯty
не изменяет оригинал,
а как добавить к перменой $i _1 я хз как :(

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

Добавлено: 2012-06-24 4:31:59
QweЯty

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

#!/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
вручную в консоли - все ок.
а скрипт отрабатывает, но ничего не нет...

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

Добавлено: 2012-06-24 11:36:07
QweЯty
сделал....

все делов том что 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
>
работает, так как нужно :)

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

Добавлено: 2012-06-30 16:52:58
QweЯty
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 `;
все робит.