【发布时间】:2012-10-26 00:06:43
【问题描述】:
可能重复:
merge two files by key if exists in the first file / bash script
我正在尝试根据冒号前面的数字来考虑将这两个文本选择组合起来的好方法(这些是我将要处理的格式相似的文本示例)。这将在 bash 环境中完成,我尝试过使用 cut 和其他命令来完成它的方法,但我无法想出任何可行的方法。
selection 1
1:829ede2828e9
2:893h8ew9nediucn
3:mdheuwe883ud8932
selection 2
1:stack
2:over
3:flow
输出将类似于
1:stack:829ede2828e9
2:over:893h8ew9nediucn
3:flow:mdheuwe883ud8932
所以它本质上是根据冒号前面的数字组合和匹配文件。该代码将用于处理大约 39,000 行文本。在这个时间点我很困惑,所以我非常感谢我能得到的任何帮助,谢谢!还忘了提到数字将不一致(例如 1,3,4,5,9,11,22),尽管两个文件/文本集将具有相同的数字集。
【问题讨论】:
-
这个怎么样:join?
-
^ 如果它们已排序,请执行此操作。如果不是,则首先对它们进行排序需要两个步骤。
sort. -
我假设这些数字没有排序或连续?它们是独一无二的吗?无论如何,39,000 行并不算多,因此您可以在内存中完成整个操作。我建议使用 awk 将行拆分为数字 => 文本关联数组,然后合并输出。为此,您同样可以使用任何支持关联数组(Python、Ruby、Php、Perl 等)的脚本语言。
-
数字将被排序,但它们不会保持一致,因此可能有 1:sdds 3:sddsdsdsd 4:ddsds 7:cdds 等等,尽管两组数据都有相同的数字
-
@lacrosse1991 将这种情况(可能缺少数字)添加到您的问题中可能是个好主意,以便人们在提出解决方案时可以考虑到这一点