LINUX.ORG.RU

shell скрипт, уникальные строки


0

0

дано: два текстовых файла (list1.txt и list2.txt) с уникальными строками.
требуется получить уникальные строки файла list2.txt относительно файла list1.txt, т.е. все строки не присутствующие в файле list1.txt

P.S. исп. perl, python и пр. языки нежелательно. Надо сделать на shell и средствами стандартных UNIX утилит.

Спасибо.

anonymous

Re: shell скрипт, уникальные строки

diff

tugrik ★★ ()

Re: shell скрипт, уникальные строки

man uniq

Dimez ★★★★★ ()

Re: shell скрипт, уникальные строки

Если в list* не встречается символ @ (ты же не спамер:), то:
 
foo()
{
    cat $1 | sort > $1.tmp
    cat $2 | sort > $2.tmp
    join -t @ -v 2 $1.tmp $2.tmp
    rm -f $1.tmp $2.tmp
}

dilmah ★★★★★ ()
Ответ на: Re: shell скрипт, уникальные строки от Dimez

Re: shell скрипт, уникальные строки

А конкретнее. Как используя uniq найти строки файла list2.txt которых нет в list1.txt

$ cat list1.txt
line1
line2
text1
text2
string1
string2

$ cat list2.txt
line2
string1
other1
text4
text1

на выходе должно быть
other1
text4

anonymous ()
Ответ на: Re: shell скрипт, уникальные строки от dilmah

Re: shell скрипт, уникальные строки

Спасибо, работает.
Я тоже решил, но иначе.
У меня получилось длинее, но без промежуточных файлов. Хотя с join правильнее, наверное

anonymous ()

Re: shell скрипт, уникальные строки

> т.е. все строки не присутствующие в файле list1.txt
А так не подойдет ? Всего одной командой... :-)
egrep -v -f list1.txt list2.txt

P.S. man egrep !

spirit ★★★★★ ()
Ответ на: Re: shell скрипт, уникальные строки от spirit

Re: shell скрипт, уникальные строки

> egrep -v -f list1.txt list2.txt

А если в list1.txt присутствуют нерегулярные символы ( .*+?скобки и тд.), то egrep выдаст неверный результат

sdio ★★★★★ ()
Ответ на: Re: shell скрипт, уникальные строки от sdio

Re: shell скрипт, уникальные строки

Если шаблоны не нужны, если работа идет с обычными строками, тогда использовать fgrep, он же grep -F.

spirit ★★★★★ ()

Re: shell скрипт, уникальные строки

cat 1.txt 2.txt | sort | uniq -u

как вариант

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