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

时间:2010-11-18 16:51:57

标签: bash unix shell text

我们假设有一个看起来像这样的文件:

xxxx aa whatever
yyyy bb whatever
zzzz aa whatever

我想把它分成两个文件,包含:

第一

xxxx aa whatever
zzzz aa whatever

第二

yyyy bb whatever

即。我想根据行中的某些值对行进行分组(规则可以是:第二个单词用空格分隔),但不要对组内的行重新排序。

当然我可以写一个程序来做,但我想知道是否有任何现成的工具可以做这样的事情?

对不起,我没有提到它,因为我认为它非常明显 - 许多不同的“单词”是巨大的。我们谈论的至少有10000个。即基于枚举单词的任何解决方案都不起作用。

而且 - 我不太喜欢多遍分割 - 有问题的文件通常都很大。

2 个答案:

答案 0 :(得分:6)

这将创建名为output.aaoutput.bb等的文件:

awk '{print >> "output." $2}' input.file

答案 1 :(得分:1)

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

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