【问题标题】:How to merge two files line by line in shell script? [duplicate]如何在shell脚本中逐行合并两个文件? [复制]
【发布时间】:2020-09-06 03:09:17
【问题描述】:

我想将两个输入文件合并到第一个文件加上第二个不重复文件的内容(仅考虑第一个参数以逗号分隔)。如何在 .sh 中实现这一点?以下是示例数据。谢谢

我有什么

file1            file2
1,A               1,B   
2,B               2,B   
3,C               4,B
                  5,D

期望的输出

file1
1,A
2,B
3,C
4,B
5,D

【问题讨论】:

  • 欢迎来到 Stack Overflow。 SO 是一个面向专业和爱好者程序员的问答网站。目标是您将一些自己的代码添加到您的问题中,以至少显示您为解决这个问题所做的研究工作。

标签: bash shell awk sh


【解决方案1】:

由于该问题并未明确排除此类技术,因此这是另一种方法:

sort file1 file2

sort 实用程序合并文件并对结果进行排序,在上述情况下,输出到标准输出。

【讨论】:

  • sort(至少按原样编写)会将行加倍,而不是更喜欢 file1 中的实例
  • 我觉得 sort 和 GNU uniq 稍微复杂一点:awk -F ',' '{print $2,$1}' file1 file2 | sort | uniq -f 1 | awk -v OFS=',' '{print $2,$1}' | sort
【解决方案2】:

Awk 很适合这种类型的东西

$ awk -F',' '!a[$1]++' file1 file2
1,A
2,B
3,C
4,B
5,D

说明

  • -F',' 使用逗号作为字段分隔符
  • !a[$1]++ 的快捷方式如果您以前从未见过字段#1,请打印整行

【讨论】:

  • 不错的答案,感觉有点像codegolf.stackexchange.com :) 就此而言:您可以保存两个字节,因为, 不需要引用。 awk -F, ... 也可以。
  • 完美运行 :) 谢谢
  • @oguzismail 采纳你的 +1
猜你喜欢
  • 1970-01-01
  • 2013-04-29
  • 1970-01-01
  • 1970-01-01
  • 2018-06-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-20
相关资源
最近更新 更多