поиск всех слов в текстовом файле, появляющемся в другом текстовом файле

Предположим, у меня есть два файла: a.txt и b.txt . Я хочу найти все слова в a.txt которые появляются в b.txt .

Есть ли конкретная команда для этого?

  • Как предоставить разрешения для чтения, но не удалить файл
  • Добавить человекообразную метку времени последнего редактирования в имя файла
  • Простая передача файлов
  • Проблема с разрешениями пользователей Linux
  • Корень получает ошибку «операция не разрешена» при попытке переместить aa пользователей .bash_profile
  • Как узнать, имеет ли файл CAP_NET_ADMIN?
  • Способы консолидации музыкальной папки
  • Как изменить только mtime каталога?
  • 4 Solutions collect form web for “поиск всех слов в текстовом файле, появляющемся в другом текстовом файле”

    С bash , zsh и некоторыми реализациями ksh :

     comm -12 <(tr -s '[:space:]' '[\n*]' < a.txt | sort -u) \ <(tr -s '[:space:]' '[\n*]' < b.txt | sort -u) 

    Там слово – это последовательность символов без пробела (будьте осторожны с GNU tr , который не работает с многобайтовыми символами пробела).

    comm находит общие линии между двумя отсортированными файлами. Без параметров он печатает 3 столбца: строки только в файле1, строки только в файле2 и линии, общие для обоих. Вы добавляете -1 , -2 , -3 чтобы удалить соответствующие столбцы из вывода. Поэтому comm -12 оставляет только третий столбец (общие строки).

    tr -s '[:space:]' '[\n*]' tr ansliterate любое значение символов space классов в строки новой строки, чтобы каждое слово было на собственной строке.

    sort -u сортирует и удаляет дубликаты из вывода tr .

    Подстановка процесса <(...) выполняет вывод команд tr|sort в comm .


    С zsh :

     w1=($(<a.txt)) w2=($(<b.txt)) print -rl -- ${(u)${w1:*w2}} 

    Там слово представляет собой последовательность символов, отличную от пробела, tab, nul и newline (со значением по умолчанию $IFS ).

    $(<a.txt) – это оптимизированная версия $(cat a.txt) где zsh читает содержимое файла сам по себе, не вызывая cat , поскольку он не цитируется, он претерпевает разбиение слов (но не глотает вопреки другим оболочкам ).

    Таким образом, w1 и w2 являются массивами, содержащими все слова в a.txt и b.txt .

    ${w1:*w2} – zsh-оператор, который дает пересечение двух массивов (общих для обоих элементов). (u) – флаг расширения параметра, который сохраняет уникальные элементы (удаляет дубликаты).

    print -rl печатает каждый аргумент по одной в строке.

     # Create dummy text file containing two words $ echo -e "overflow\ngrep" > b # Search in file for lines containing one word from file b $ grep --color --fixed-strings --file b /usr/share/dict/words 

    Результат в моей системе:

     overflow overflow's overflowed overflowing overflows - overflow overflow's overflowed overflowing overflows 

    Добавьте параметр -only-matching (-o), чтобы получить только слова, а не всю строку, в которой они появляются.

    Предполагая, что слова в файлах разделены LF, а слова состоят только из «хороших» символов, и в b.txt отсутствует последний LF.

     egrep `tr '\n' '|' < b.txt` a.txt 

    может сделать трюк.

    Хотя вы не работаете над словом, вам больше нравится работать над линиями, и вам может быть полезно или кто-то другой ищет ответ.

     diff --left-column --from-file=a.txt --to-file=b.txt 

    Сравнивает файл a.txt с файлом b.txt, выводящим только общие строки.

    Interesting Posts

    Функция Shell, чтобы проверить, есть ли приостановленный процесс, являющийся дочерним элементом этой оболочки?

    запустить php-скрипт в centos и время и таймаут

    Может ли bash написать свой собственный поток ввода?

    Предотвратить передачу IGP dom0 из VGA-переданного на хост HVM с Xen4.4

    Как правильно рекурсивно редактировать файлы (включая скрытые директории)

    восстановить удаленный файл на ext4 с помощью extundelete

    Форматирование в формате Printf с переменным форматом – что делает эта ссылка?

    путайте с функцией определения пользователя awk

    Devilspie2 только обнаруживает окна Firefox при перезагрузке; Как я могу это исправить?

    Как сделать 32-битное и 64-битное изображение iso под 64-разрядным debian, используя simple-cdd?

    Как планировать выполнение задачи cron

    Когда происходят изменения в gsettings?

    Все возможные комбинации символов и чисел

    Ссылки в / usr / bin или / usr / local / bin: жесткие или символические?

    numlockLed включен, но numpads не работают

    Linux и Unix - лучшая ОС в мире.