LINUX.ORG.RU

Подскажите regexp для grep

 , ,


0

1

Теряюсь в regexp...нужно из очень большого файла (миллионы строк, загнать в OO Calc не могу целиком) найти все что содержать числа подходящие под шаблон 85XX (ну и еще десяток подобных, где печальная часть 1-3 числа известны, а оставшаяся 3-1 числа может быть любой). Наверняка это элементарно, подскажите кто знаечт.

★★★★★

Условие не совсем понятно. Например, найти числа вида 85XYZ в начале строки и отделенные справа пробелом:

grep -E "^[ ]*85[0-9]{3} "

x22 ★★
()
Ответ на: комментарий от x22
"2011-01-22 13:57:32";"4";"8512";"8521"
"2011-01-22 13:57:37";"5";"8821";"8855"
"2011-01-22 14:57:03";"82";"8521";"2112"


Вот кусок файла в качестве примера, тут надо 1 и 3 строки найти

Kolins ★★★★★
() автор топика
Ответ на: комментарий от x22
grep -E "\"1[0-9]{3}\""


Ну вроде начинает походить на правду (тут все 1XXX должен отсеять), буду копать в этом направлении. Спасибо за наводку!

Kolins ★★★★★
() автор топика
Ответ на: комментарий от Kolins

Вот кусок файла в качестве примера

Опять клятая XY-проблема, да сколько можно-то.

gremlin_the_red ★★★★★
()
Ответ на: комментарий от iljuase

Это же csv. Напишите скрипт на python.

Да тут и awk и без regex будет летать. Ибо гнать из профессии надо таких программистов, которые числа сравнивают regex-ами.

vodz ★★★★★
()
Ответ на: комментарий от iljuase
#!/usr/bin/python3
import csv
import re

csv_file = open("./1.csv", 'r')

csv_reader = csv.reader(csv_file, delimiter = ";")

sum = 0

for line in csv_reader:
    if re.match("85[0-9]*", line[2]):
        sum += int(line[2])

print(sum)

Как пример.

iljuase ★★★
()
Последнее исправление: iljuase (всего исправлений: 1)
Ответ на: комментарий от vodz

1. Я не программист
2. Мне эту задачу поставили за 20 минут до совещания - «вынь да положь»

Kolins ★★★★★
() автор топика
Ответ на: комментарий от iljuase

На будущее сохранил, может пригодиться еще. Спасибо.

Kolins ★★★★★
() автор топика
Ответ на: комментарий от iljuase

Подтверждаю - решал подобную задачу, поделюсь опытом. Дано: файл csv, 800 мегабайт, надо его слегка подраспарсить было. Напарник, очень шарящий в венде задействовал Powershell. Результат - текущий как сучка скрипт съел 24 гигабайта(!) RAM и пердолил файл где-то час. Все наши попытки оптимизации этого говнища(с привлечением гугла и stack overflow) особым успехом не увенчались(называть успехом снижение потребления памяти с 24 гигов до 6 язык не поворачивается). Хотелось принципиально решить Powershell-ом, но в одни прекрасный момент я плюнул и за пару минут налабал минимальный прототип на питоне(без всякой оптимизации, тупо import csv и поехали). Результат - 10 минут пердолинга, среднее потребление памяти - 5 мегабайт. Мегабайт, КАРЛ!

В общем с тех пор у меня к Powershell еще более «не очень» отношение. Началось это не очень еще «раньше» - с того момента, когда я понял что эта срань стартует где-то 5-10 секунд в среднем(SSD, если чо, так что господа кричащим «ко-ко-ко, выкинь свой жесткий диск», просьба - не беспокоить).

То есть на замену того же cmd.exe когда надо что-то быстро открыть, выполнить и закрыть оно опять таки подходит мягко говоря не очень.

Короче я - видимо не целевая аудитория Powershell :-)

Pinkbyte ★★★★★
()
Ответ на: комментарий от Pinkbyte

Хотелось принципиально решить Powershell-ом, но в одни прекрасный момент я плюнул и за пару минут налабал минимальный прототип на питоне(без всякой оптимизации, тупо import csv и поехали). Результат - 10 минут пердолинга, среднее потребление памяти - 5 мегабайт.

На той же системе при всех прочих равных?

x22 ★★
()
Ответ на: комментарий от x22

На той же системе при всех прочих равных?

Да, прямо на этой же виртуалке с виндой

Pinkbyte ★★★★★
()
Ответ на: комментарий от Pinkbyte

… Powershell … скрипт съел 24 гигабайта(!) RAM и пердолил файл где-то час. Все наши попытки оптимизации этого говнища(с привлечением гугла и stack overflow) особым успехом не увенчались(называть успехом снижение потребления памяти с 24 гигов до 6 язык не поворачивается).

Powershell, похоже, буферизует ввод как не в себя.

x22 ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.