Выполнение (вертикальный?) разность на столбцах в файле

Это дает Вам хорошие направления для сокращения Вашего использования основной памяти:

http://www.theodorenguyen-cao.com/2008/12/07/reduce-mysql-memory-usage/

Можно затем использовать это для оценки использований памяти MySQL на основе my.ini/my.cnf

http://www.omh.cc/mycnf/

И конечно, необходимо проверить MySQL Performance Blog.

0
задан 9 February 2010 в 00:09
2 ответа

Перефразируя вопрос более grep-дружественным способом, Вы хотите распечатать все строки, которые соответствуют EAN из некоторого основного списка EANs.

При предположении, что что-то напоминающее EAN не обнаружится нигде кроме столбца EAN, попробуйте:

  • Извлеките весь EANs из master
  • Повидло, что список EANs в regex
  • Подайте regex к egrep

Принятие EAN является первым столбцом master (и что ведущее устройство содержит другие столбцы),

egrep "(`cat master | awk '{print $1}' | tr '\n' '\\|' | sed 's/|$//'`)" newfile

должен приблизиться (можно удалить awk если master просто список EAN; противный sed в конце для удаления запаздывания | это следует из остальной части конвейера),

Вышеупомянутое ломается, если бы EANs (или подобные EAN 13-разрядные шаблоны) присутствуют в другом месте в данных и потребовали бы, чтобы более сложное регулярное выражение ограничило поиск определенным столбцом.

1
ответ дан 4 December 2019 в 23:12
  • 1
    (правильность вышеупомянутого бита противных, проверенных в оболочках Bourne - вероятно, прерванный оболочки C b/c ужасных обильных :) –  voretaq7 8 February 2010 в 23:47
  • 2
    Привет voretaq7, спасибо за Ваш ответ! Не попробовав, я боялся бы хлюпать 4,5 млн. EANs в один regex... –  jotango 9 February 2010 в 00:11
  • 3
    4.5M EANs - вероятно, слишком для один regex - можно сделать обман головы/хвоста для разделения ведущего устройства на блоки, но если you' ve получил ЭТО много строк, Вы могли бы хотеть начать смотреть на основанные на базе данных решения вместо сценариев - индексируемым INNER JOIN или SELECT ... WHERE будет намного больше эффективного пространства и времени :-) –  voretaq7 9 February 2010 в 00:29

Попробуйте что-то вроде этого:

# Put each code in one line, and sort them
sed -e 's/\ /\n/g' new | sort > neweans
sed -e '/s\ /\n/g' master | sort > mastereans

# Diff them by columns, and delete from the list
# the new's that are not in master. Then, print them

diff -y neweans mastereans | grep -v "<" | awk '{print $1}'
0
ответ дан 4 December 2019 в 23:12
  • 1
    эй sntg, спасибо за Ваш ответ! Как я пошел бы о хранении исходных данных в файле? Ваш ответ дает мне соответствие EANs, но мне нужна целая строка... Если я didn' t понимают Ваш ответ. –  jotango 9 February 2010 в 00:15
  • 2
    Вы получили EANS, которые находятся в neweans и в masterfile, файлы являются нетронутыми. Попытайтесь выполнить разность без каналов и видеть вывод. –  sntg 9 February 2010 в 00:44

Теги

Похожие вопросы