Разделить вход на несколько выходов в зависимости от содержимого? - PullRequest
3 голосов
/ 18 ноября 2010

Давайте предположим, что есть файл, который выглядит следующим образом:

xxxx aa whatever
yyyy bb whatever
zzzz aa whatever

Я хотел бы разбить его на 2 файла, содержащие:

first:

xxxx aa whatever
zzzz aa whatever

second:

yyyy bb whatever

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

Конечно, я могу написать программу для этого, но мне интересно, есть ли какой-нибудь готовый инструмент, который может сделать что-то подобное?

Извините, я не упомянул об этом, так какПредполагается, что это довольно очевидно - количество различных «слов» огромно.речь идет как минимум о 10000 из них.Т.е. любое решение, основанное на перечислении слов перед рукой, не будет работать.

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

Ответы [ 2 ]

6 голосов
/ 18 ноября 2010

Это создаст файлы с именами output.aa, output.bb и т. Д.:

awk '{print >> "output." $2}' input.file
1 голос
/ 18 ноября 2010

Ну, вы могли бы сделать grep, чтобы получить строки, которые совпадают, и grep -v, чтобы получить строки, которые не совпадают.

Хм, вы могли бы сделать sort -f" " -s -k 2,2, но это O (n log n).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...