искать шаблон в файле и выводить каждый результат шаблона в свой собственный файл, используя awk, sed - PullRequest
2 голосов
/ 25 октября 2011

У меня есть файл чисел в каждой новой строке: $ cat test

700320947
700509217
701113187
701435748
701435889
701667717
701668467
702119126
702306577
702914910

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

700320947.csv
700509217.csv
701113187.csv
701435748.csv
701435889.csv
701667717.csv
701668467.csv
702119126.csv
702306577.csv
702914910.csv

Логика:

ls test | while read file; do zgrep $line *large*file*gz >> $line.csv ; done

Пожалуйста, помогите. Спасибо

Ответы [ 2 ]

3 голосов
/ 25 октября 2011

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

Это можно сделать за один проход через каждый из файлов, используя перенаправление вывода в awk:

awk -F"," 'FILENAME == "test" { num[$1]=1; next } 
  num[$2] { print > $2".csv" }' test bigfile
3 голосов
/ 25 октября 2011

Сначала распакуйте большой файл;использование zgrep означает разархивирование на лету для каждой строки числового файла ... очень неэффективно.После распаковки большого файла это будет сделано:

for number in `cat test`; do grep $number bigfile > $number.csv; done

Отредактировано:

Чтобы ограничить попадания только целыми словами (например, 702119126 не будет совпадать 1702119126), добавьтеграницы слова для регулярного выражения:

for number in `cat test`; do grep \\b$number\\b bigfile > $number.csv; done
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...