В то время как цикл чтения с grep

У меня есть файл csv со многими строками, и мне нужно найти некоторые совпадения и вывести их в файл. Мои данные:

Файл 1

qwerty asdfgh zxcvbn qwerty aassdd zzxxcc yyuuii tttttt 

Мне нужно сопоставить:

Файл 2

 qwert tttttt aassdd. 

Поскольку мой файл большой, и мой список для соответствия длинный, я делаю это:

 while read n ; do grep $n File_1.csv >> results.csv ; done < File_2.csv 

Я не могу получить результат, который хотел. Пожалуйста помоги!

3 Solutions collect form web for “В то время как цикл чтения с grep”

Вам не нужно зацикливаться; параметр -f принимает файл с шаблонами для поиска:

 grep -Ff File_2.csv File_1.csv > results.csv 

Я также добавил параметр -F чтобы условия поиска обрабатывались буквально, а не как регулярное выражение.

Утилита grep может считывать шаблоны из одного файла и сопоставлять их с содержимым другого файла. Никакой цикл в оболочке не требуется.

 $ grep -f patterns file 

Используя два файла, которые у вас есть в вашем вопросе (файл 1 является file а файл 2 – patterns ), это создает

 qwerty qwerty tttttt 

Чтобы сопоставлять шаблоны с patterns как фиксированные строки (а не регулярные выражения), добавьте -F :

 $ grep -F -f patterns file 

В приведенном примере это дает тот же результат, что и без -F .

Согласование силы по полным линиям, добавьте -x :

 $ grep -x -F -f patterns file tttttt 

Поскольку qwerty не соответствует qwert полностью, эти строки не возвращаются.

Если в каждом файле нет дубликатов, вы можете сделать следующее:

 # In file_1 and file_2 sort file_1 file_2 | uniq -d # In file_1 or file_2 but not both sort file_1 file_2 | uniq -u # In file_1 and not file_2 sort file_1 file_2 | uniq -d | sort - file_1 | uniq -u # In file_2 and not file_1 sort file_1 file_2 | uniq -d | sort - file_2 | uniq -u 
  • регулярное выражение egrep для раз в пять минут
  • Grep 2 разных требования в одном заявлении командной строки
  • grep для строк, которые были найдены в предыдущем заявлении
  • Как подсчитать вхождения всех слов во всех файлах каталога с помощью grep? Но с подсчетом, увеличенным только один раз за слово на файл
  • Проблема с grep -o regex
  • bash script: более элегантный способ получить самую последнюю версию go?
  • код выхода grep в ловушке, где скрипт запускается при помощи функции upstart
  • Как проверить, существуют ли в файле некоторые строки, существующие в файле?
  • Удалить файлы с совпадением только из некоторых подкаталогов
  • Подавлять конкретные экземпляры ключа поиска в grep
  • Использование grep для печати всех соответствующих строк, не разделенных пробелом
  • Linux и Unix - лучшая ОС в мире.