LINUX.ORG.RU
ФорумAdmin

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


0

0

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

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

Спасибо.

anonymous

Если в 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 ★★★★★
()
Ответ на: комментарий от Deleted

А конкретнее. Как используя 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
()
Ответ на: комментарий от dilmah

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

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

Сорри, невнимательно прочитал условие.

Deleted
()

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

P.S. man egrep !

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

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

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

sdio ★★★★★
()
Ответ на: комментарий от spirit

Согласен.

P.S. А вообще надо бы сесть перечитать маны стандартных утилит.

sdio ★★★★★
()

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

как вариант

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