Вопрос Grep для фильтрации гигантского файла CSV


Я имею дело с CSV-файлом, который содержит более 2 миллионов строк. Довольно большой.

Мне нужно использовать grep (или любой лучший способ) для извлечения всей строки, если значение второго столбца соответствует «jpn» или «por».

Я попытался использовать grep '<\jpn\>' || grep '<\por\>' file1.csv > file2.csv но пока не добился успеха. Основная проблема заключается в том, что «por» является обычным явлением в третьем столбце, который генерирует более миллиона нежелательных строк.

Может ли какой-нибудь более опытный пользователь быть добрым и оказать мне некоторую помощь?

Заранее спасибо! : D


4
2017-10-17 02:28


происхождения




ответы:


На какой ОС Linux вы работаете? Попробуйте использовать egrep если вы хотите использовать регулярные выражения в системах, версия grep которых устарела (например, Solaris).

Во всяком случае, вот решение awk:

awk -F, '$2 ~ /jpn|por/ {print}' file1.csv > file2.csv

Пояснения:

  • awk для операций на основе столбцов
  • -F, для определения разделителя столбцов / токенизатора, в этом случае я использую запятую
  • $2 ~ /jpn|por/ столбец тестов # 2 с выражением /jpn|por/
    • $2 это столбец №2
    • /jpn|por/ является регулярным выражением для соответствия jpn или por
  • {print} указывает, что awk должен выводить, если он нашел совпадающую строку
    • print для печати всей строки ввода (в качестве альтернативы, print $3 будет просто печатать столбец № 3)
  • ... file1.csv указывает на чтение из входного файла вместо stdin

11
2017-10-17 05:05



Я использую OS X 10.10. - Ваш наконечник работал как шарм! Большое спасибо! ;) - YLeven


grep '; jpn;\|; por;' /path/to/file1.csv > file2.csv

Предполагая, что точка с запятой (;) является разделителем.


1
2017-10-17 03:02





Я не уверен, но, возможно, это может сработать:

grep '^[^,]*,\(por\|jpn\)\(,\|$\)' file1.csv > file2.csv

Предполагая, что «,» является разделителем.


0
2017-10-17 04:05





Кажется, это работает для меня:

egrep '^.?,(jpn|por),.*$' file1.csv > file2.csv

0
2017-10-17 06:04