Сравнение двух файлов по индивидуальному критерию

Имя вашего сервера определено как:

  ServerName prst.app

поэтому определите в /etc/hostsprst.app, а не www.prst.app

127.0.0.1   prst.app

Для доступа к www.prst.app создайте новый виртуальный хост и новую запись в/etc/hosts

-1
04.09.2020, 05:51
4 ответа

Быстрый скрипт tcsh:

#  arg2linesNOTINarg1.csh:
#  tcsh
#  LINES FROM ARG2 THAT ARE NOT IN ARG1
#
if ( $#argv < 2 ) then
   echo ' set fileWITHavoidedLINES = $1 '
   echo ' set fileTOsearch = $2 '
else
   set fileWITHavoidedLINES = $1
   set fileTOsearch = $2
endif
set genSRCHstr =  'awk '"'"'BEGIN { started=0; } \
                          { if (started==0) printf("^%s$",$0);  \
                           else printf("|^%s$",$0) ; started=1 } \
     END { printf("\n") } '"'"' '"${fileWITHavoidedLINES}"' '
egrep -v `eval ${genSRCHstr}` $fileTOsearch

Это можно запустить с помощью:

tcsh arg2linesNOTINarg1.csh File2.txt  File1.txt

Могут возникнуть проблемы с созданием строк поиска, если строки слишком длинные или содержат определенные символы, такие как пробелы или табуляции. Возможно, удастся изменить это, чтобы предотвратить эти проблемы, но это предложение — только начало.

0
18.03.2021, 23:07

Если они отсортированы, попробуйте:

comm -23 File1.txt File2.txt

Если они не отсортированы, но сортировать можно, попробуйте в bash:

comm -23 <(sort File1.txt) <(sort File2.txt)

Если вы не uniqили sort -uFile1.txt, строки, которые встречаются в File1.txt чаще, чем в File2.txt, будут выводиться. Это может подходить или не подходить для вашего варианта использования.

Если один файл уже отсортирован, вы можете использовать простой конвейер в большинстве оболочек, например:

sort File1.txt | comm -23 - File2.txt
1
18.03.2021, 23:07

Упрощено благодаря @Jeff Schaller

Попробуйте:

fgrep -vx -f File2.txt File1.txt

Это :найти все строки в файле File1.txt, которые не соответствуют строке из файла File2.txt

Параметр -x, о котором я раньше не знал, приводит к тому, что для соответствия требуется полная строка.

Параметр -v говорит, что нужно показать те, которые не совпадают.

Параметр -f указывает, что строки в файле, которые следуют за ним, являются шаблонами.

1
18.03.2021, 23:07

Ок

awk 'NR==FNR{a[$1];next}!($1 in a){print $1}' file2.txt file1.txt

выход

A
B
0
18.03.2021, 23:07

Теги

Похожие вопросы