【问题标题】:How can I combine files based on a common field? [duplicate]如何基于公共字段组合文件? [复制]
【发布时间】: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 将这种情况(可能缺少数字)添加到您的问题中可能是个好主意,以便人们在提出解决方案时可以考虑到这一点

标签: file bash unix sorting


【解决方案1】:

你可以像这样使用join

join -t: selection2.txt selection1.txt

【讨论】:

  • *提供文件已排序。
  • @therefromhere 当然可以,但它们已在 cmets 中得到证实。
  • 是的,但值得在您的回答中提及这一点,以使未来的访问者受益。
猜你喜欢
  • 2023-02-13
  • 2020-01-07
  • 2020-08-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-30
  • 1970-01-01
相关资源
最近更新 更多