Nano Hash - криптовалюты, майнинг, программирование

Выделите "большинство" строк, отвечающих определенному условию

У меня есть файл данных на 16 миллионов строк, который я использую как часть инструмента регрессионного тестирования / воспроизведения. В данных много похожих строк. Я хотел бы удалить многие из этих похожих строк из файлов

Файл в формате

|DATA|DATA|DATE|3|DATA|DATA
|DATA|DATA|DATE|3|DATA|DATA
|DATA|DATA|DATE|3|DATA|DATA
|DATA|DATA|DATE|2|DATA|DATA
|DATA|DATA|DATE|4|DATA|DATA
|DATA|DATA|DATE|2|DATA|DATA
|DATA|DATA|DATE|2|DATA|DATA

Файл состоит из 16 миллионов строк, а строки с 4-м элементом, состоящим из 2, 3 или 10, составляют 13 миллионов строк. Строки с 4-м элементом из 2, 3 или 10 похожи друг на друга, поэтому я хотел бы удалить 90% из них из файла. Чтобы получить некоторое количество типов сообщений, я смог запустить эту команду, чтобы найти все строки с 4-м элементом из 3

awk -F"|" '$4=="3"' capture.txt > out.txt 

Эта строка была тем, что я использовал, чтобы определить, насколько повторяемы наиболее распространенные сообщения, но она не помогает мне сократить эти записи. Я действительно хочу иметь возможность создать новый файл, включающий

    (All records where pipe deliminated 4th element is not 2, 3 or 10) +
    (1 out of every 10 records where the 4th element is 2, 3 or 10)

Возможно ли это за один проход по файлу? Я решил, что могу создать два файла, отделяя записи с 4-м элементом 2, 3 или 10 от тех, у которых был другой 4-й элемент. Тогда я мог бы, вероятно, отбросить каждую 10-ю строчку из одного файла и снова объединить их. Но на самом деле я предпочитаю делать это за один проход и сохранять исходный порядок файлов.

Есть предположения?

20.05.2016

  • В вашем примере ввода похоже, что вас действительно волнуют 5 долларов, а не 4 доллара. 21.05.2016

Ответы:


1

Возможно, рандомизированный подход будет лучше.

awk -F'|' 'BEGIN{srand()} $5~/^(2|3|10)$/{if(rand()<0.1) print; next}1' file

будет около 10% вероятности печати этих строк, вы также можете установить семя, чтобы оно было повторяемым. Обратите внимание, что вы должны проверять пятое поле, а не четвертое.

20.05.2016
  • Это и лучшая идея, и более чистая реализация, чем моя неудачная попытка. Я вернусь к работе сейчас. 21.05.2016

  • 2

    Предоставленный вами пример ввода содержит постоянную строку "DATE" в $ 4, но $ 5 имеет 2,3 и 4, поэтому вы, вероятно, ищете что-то вроде:

    awk '$5 != 2 && $5 != 3 && $5 != 10 {print; next} a++%10 == 0' FS=\| input > output
    
    20.05.2016
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..