Как сравнить все файлы в каталоге с другим файлом и распечатать общие строки

Вы можете сэкономить полосу пропускания, скачав debian CD ~ 630 M , торрент доступен с здесь : (debian-8. 6.0-amd64-CD-1.iso.torrent)

Нужно ли скачивать все?

На этот же вопрос есть ответ в часто задаваемых вопросах: Какой из многочисленных образов нужно скачать? Нужно ли мне их все?

Нет. Во-первых, конечно, вам нужно скачивать только образы CD или DVD или BD - эти три типа образов содержат одинаковые пакеты.

В большинстве случаев нет необходимости скачивать все образы для вашей архитектуры. Пакеты отсортированы по популярности: Первый CD/DVD/BD содержит систему установки и наиболее популярные пакеты. Второй содержит чуть менее популярные, третий - еще менее популярные и т.д. Скорее всего, вам понадобится только первая пара DVD (или первые несколько CD), если у вас нет особых требований. (А если впоследствии вам понадобится пакет, которого нет ни на одном из загруженных CD/DVD/BD, вы всегда сможете установить его прямо из Интернета)

2
01.08.2016, 09:50
1 ответ

С помощью awk, что-то вроде этого:

awk -F\; 'NR == FNR {A[$0]=1; next}; A[$2] == 1;' emails.txt john*.txt

NR == FNR проверяет, совпадает ли номер записи (строки), подсчитанный по всем файлам, с номером записи в текущем файле, что является забавным способом проверки, является ли этот файл первым. Если это так, мы берем прочитанную строку ($0) и используем ее как ключ к ассоциативному массиву A, устанавливая значение в единицу и переходя к следующей строке ввода. Если это был не первый файл (переход не был сделан), возьмите второе поле ($2) в строке, разделенное точкой с запятой (задается -F) и посмотрите, равно ли соответствующее значение в массиве A единице. Если да, то по умолчанию будет выведена вся строка. Можно добавить, скажем, {print $1}, чтобы вывести только первое поле.


С grep вы можете просто сделать

grep -F -f emails.txt john*.txt

(-F для фиксированных строковых шаблонов, -f для чтения шаблонов из файла). Но при этом будут выводиться и частичные совпадения, а также совпадения из других полей в файле, но это может не быть проблемой для имен, номеров телефонов и адресов электронной почты.

Хотя это можно обойти, добавив точку с запятой в начало и конец каждой строки, используемой в качестве шаблона. Это должно работать, если поддерживается подстановка процессов:

grep -F -f <(sed -e 's/^/;/' -e 's/$/;/' emails.txt) john*.txt 
2
27.01.2020, 22:11

Теги

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