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 ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.