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

Bash 根据内容将输入拆分为多个输出?,bash,unix,shell,text,Bash,Unix,Shell,Text,假设有一个文件如下所示: xxxx aa whatever yyyy bb whatever zzzz aa whatever 我想将其拆分为2个文件,其中包含: 第一: xxxx aa whatever zzzz aa whatever 第二: yyyy bb whatever 也就是说,我想根据行中的某个值对行进行分组(规则可以是:第二个单词用空格分隔),但不要在组中对行重新排序 当然,我可以写一个程序来做这件事,但我想知道是否有现成的工具可以做这样的事情 对不起,我并没有提到这一点,

假设有一个文件如下所示:

xxxx aa whatever
yyyy bb whatever
zzzz aa whatever
我想将其拆分为2个文件,其中包含:

第一:

xxxx aa whatever
zzzz aa whatever
第二:

yyyy bb whatever
也就是说,我想根据行中的某个值对行进行分组(规则可以是:第二个单词用空格分隔),但不要在组中对行重新排序

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

对不起,我并没有提到这一点,因为我认为这是非常明显的——不同的“单词”数量是巨大的。我们谈论的至少是10000个。也就是说,任何基于前面单词枚举的解决方案都不起作用


而且-我不太喜欢多程分割-所讨论的文件通常都相当大。

好吧,你可以用grep得到匹配的行,用grep-v得到不匹配的行


嗯,您可以执行排序-f“-s-k2,2,但这是O(n log n)。

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

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

这太棒了!它甚至进行缓冲以限制IO操作的数量。非常感谢。大约在1994年,我与当时的GNU grep的维护者讨论了是否可以添加一个标志来匹配stdout和stderr的其他行,但他不喜欢这个想法:-)。