根据内容将输入拆分为多个输出?

3
假设有一个文件长这样:
xxxx aa whatever
yyyy bb whatever
zzzz aa whatever

我希望将其分为两个文件,包含:
第一个文件:
xxxx aa whatever
zzzz aa whatever

第二个(内容):
yyyy bb whatever

即,我想根据行中某个值(规则可以是:由空格分隔的第二个单词)对行进行分组,但不要重新排列组内的行。
当然,我可以编写程序来完成这项工作,但我想知道是否有任何现成的工具可以做到这样的事情?
抱歉,我没有提到它,因为我认为这很明显——不同“单词”的数量非常庞大。我们至少谈论了10000个单词。即,任何基于提前枚举单词的解决方案都不起作用。
并且,我也不太喜欢多次划分——涉及的文件通常相当大。
2个回答

6
这将创建名为output.aaoutput.bb等的文件:
awk '{print >> "output." $2}' input.file

太棒了!它甚至进行缓冲以限制IO操作的数量。非常感谢。 - user80168

1

嗯,你可以使用grep获取匹配的行,使用grep -v获取不匹配的行。

嗯,你可以做sort -f" " -s -k 2,2,但这是O(n log n)的。


大约在1994年,我曾与当时的GNU grep维护者讨论过是否可以添加一个标志来将匹配项输出到stdout,将其他行输出到stderr,但他不喜欢这个想法 :-)。 - Tony Delroy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接