【问题标题】:Compare and combine two files (shell script)比较和合并两个文件(shell 脚本)
【发布时间】:2014-06-18 19:23:42
【问题描述】:

我有两个输入文件。

我需要比较 file1 和 file2 并合并两个文件中具有相同 第一个字段 的行。 (该行的其余部分可以忽略该行的其余部分。)

理想情况下,我希望输出文件中的字段用管道分隔。

我认为我只需要一个简单的 shell 脚本。

文件1

0001|14
9934|3
4555|33

文件2

0001|coffee|grocery store
0003|gasoline
0005|pickup sticks
9934|protein bars
4555|car

期望的输出:

文件3

0001|14|0001|coffee|grocery store
9934|protein bars
4555|33|4555|car

任何帮助将不胜感激。

【问题讨论】:

  • 您想要的输出不一致。第一行和第三行再次包含“key”列,并包含两个文件中的所有其他列。第二个仅包含来自 file2 的键和附加列。解决方案应如何确定要遵循这两种模式中的哪一种?

标签: shell


【解决方案1】:

使用 awk:

awk 'BEGIN{FS=OFS="|"} FNR==NR {a[$1]=$0; next} $1 in a {print a[$1], $0}' f1 f2
0001|14|0001|coffee|grocery store
9934|3|9934|protein bars
4555|33|4555|car

【讨论】:

  • 感谢您的快速回复。我尝试了这个命令并收到以下错误: awk:第 1 行附近的语法错误 awk:在第 1 行附近退出
  • 这是在 BSD 和 gnu awk 上测试的。你能检查一下你的 awk 版本并告诉我吗
  • 我不太确定如何检查。我运行了什么 /usr/bin/awk 和什么 /bin/awk,它们返回了 SunOS 5.10 Generic 127884-01 Oct 2007
  • 哦 SunOS 似乎正在使用非常旧的 awk 版本。我在某处读到 SunOS 中提供了 nawk 和 awk 。但是我没有办法在 SunOS 上进行测试,因为我只有 Mac 和 Linux 主机可用。
  • 感谢您的尝试。运行 nawk 时我没有收到错误,但也没有任何反应。那好吧。我会继续加油的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-08
  • 2023-03-30
  • 2020-08-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多