LINUX.ORG.RU
ФорумAdmin

Вопрос по grep, cat: Как вывести в одну строку следующее выражение?

 ,


0

1
cat DSLAM_ip.txt FTTB_ip.txt | grep -f mrtg_ip.txt > tmp.txt
grep -v -f tmp.txt mrtg_ip.txt > task_ip.txt

т.е. результат вывода первой строки использовать в качестве аргумента команды grep во второй строке? Желательно без использования tmp.txt...


ИМХО проще всего через переменную, хотя можно создавать свои пайпы, но врядли в данном случае пайпы пригодятся

belous_k_a
()
Ответ на: комментарий от belous_k_a

ИМХО проще всего через переменную

А по подробнее, как это будет выглядеть?

xseed
() автор топика
Ответ на: комментарий от teod0r

.... | grep ... | grep ... | grep ... | grep ... | grep ... ... . . .... .. .

grep надо указывать аргументы. Могу ли я как то указать выражение «cat DSLAM_ip.txt FTTB_ip.txt | grep -f mrtg_ip.txt» в качестве первого аргумента после «grep -v -f »

xseed
() автор топика
Ответ на: комментарий от arcanumtarant

... while read LINE ; do ...

Спасибо, конечно, но как мне теперь изловчиться перевести это на винду под unixutils? Дело в том, что под вынем нет while ... do ... do done. PS: Вы вправе не отвечать на этот вопрос, так как он не касается тематики данного сайта.

xseed
() автор топика

В rc shell это можно было бы сделать так:
cat DSLAM_ip.txt FTTB_ip.txt | grep -f mrtg_ip.txt | while(tmp=`{read}){
grep -v -e $«tmp mrtg_ip.txt >> task_ip.txt
}

quantum-troll ★★★★★
()
Ответ на: ... while read LINE ; do ... от xseed

под вынем нет while ... do ... do done

Почему бы тебе не поставить полноценный порт sh?

quantum-troll ★★★★★
()
Ответ на: комментарий от arcanumtarant

Так что же ты это в теме не указал дурачок ?

Разобрался, получается примерно так:

cat DSLAM_ip.txt FTTB_ip.txt | grep -f mrtg_ip.txt > tmp.txt | grep -v -f tmp.txt mrtg_ip.txt > task_ip.txt

Правда временный файл так и остался. А обзываться не стоит, особенно когда приходится работать с другими осями!

xseed
() автор топика
Ответ на: комментарий от baka-kun

[code]cat DSLAM_ip.txt FTTB_ip.txt | grep -f mrtg_ip.txt | grep -v -f - mrtg_ip.txt > task_ip.txt[/code]

baka-kun, к сожалению, нет, получится то же. что и в mrtg_ip.txt...

xseed
() автор топика

получится то же. что и в mrtg_ip.txt

То есть grep -v -f - не прочитает из stdin ни байта? Тебе уже сказали, куда запихнуть систему с такими проблемами в реализации POSIX?

baka-kun ★★★★★
()
Ответ на: комментарий от baka-kun

Тебе уже сказали, куда запихнуть систему с такими проблемами в реализации POSIX?

Спасибо. Учтем на будущее.

xseed
() автор топика
Ответ на: комментарий от akk

Зачем тут cat?

Хорошо, вот без cat:

grep -F -v -f a.txt b.txt > c.txt

Как вместо c.txt использовать b.txt без переименования отдельной командой?

grep -F -v -f a.txt b.txt > b.txt

не работает

xseed
() автор топика
Ответ на: Зачем тут cat? от xseed

И не будет работать. Шелл, как ему и указано, обнуляет b.txt еще до запуска grep.

Хотите одной командой? Так создайте нормальную foo.sh, и вызывайте ее.

#!/bin/sh

buf="$(grep -F -v -f a.txt b.txt)"
[ "$buf" ] && echo "$buf" > b.txt
rihad
()
Ответ на: комментарий от rihad

Спасибо, я подумаю над этим предложением

xseed
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.