【问题标题】:Joining two files in AWK - Join Column at different positions在 AWK 中加入两个文件 - 在不同位置加入列
【发布时间】:2017-07-20 08:27:21
【问题描述】:

文件 A 有以下 3 列: AccountNumber、CustomerName、余额

文件 B 有以下 5 列 SystemID、AccountNumber、Product、OpenDate

我正在使用下面的 AWK 代码来连接这两个文件。它不工作

FNR==NR{a[$1]=$0;next}$2 in a{ print $0, a[$1]}

这两个文件的组合输出预期如下 SystemID、AccountNumber、Product、OpenDate、CustomerName、Balance

仅在 AWK 代码中请求帮助。我知道通过 SORT 和 JOIN 可以使用类似的功能,但我只在寻找 AWK 解决方案。

档案一: +---------------+---------------+----------+ |帐号 |客户姓名 |余额 | +---------------+---------------+----------+ | 3 | C | 100 | | 4 |一个 | 200 | | 5 |乙| 300 | +---------------+---------------+----------+ 文件 B: +-----------+----------------+----------+--------- -----+ |系统ID |帐号 |产品 |开幕日期 | +-----------+----------------+----------+--------- -----+ | 1 | 6 |研发 | 12-05-17 | | 2 | 4 |某人 | 17 年 5 月 15 日 | | 3 | 3 |道明 | 02-04-17 | | 4 | 5 |某人 | 15-01-17 | +-----------+----------------+----------+--------- -----+ 加入后的输出: +-----------+----------------+----------+--------- -----+--------------+----------+ |系统ID |帐号 |产品 |开幕日期 |客户姓名 |余额 | +-----------+----------------+----------+--------- -----+--------------+----------+ | 2 | 4 |某人 | 17 年 5 月 15 日 |一个 | 200 | | 3 | 3 |道明 | 02-04-17 | C | 100 | | 4 | 5 |某人 | 15-01-17 |乙| 300 | +-----------+----------------+----------+--------- -----+--------------+----------+

【问题讨论】:

  • 请发布示例输入。同样在print $0, a[$1] 中,索引应该是$2?
  • 更新了样本输入。
  • @user1955215:你为什么要使用awk?文件是否带有|-----------+ 符号?您希望 awk 对这些字符进行限制吗?以这种方式格式化输出在 awk 中并不简单
  • 您希望第二个循环中的 a[$2] 引用第二个字段。投票结束是一个琐碎的错字。
  • ...不过,除此之外,您将希望在第一个循环中仅捕获 $2$3 而不是所有 $0,以准确获取您正在寻找的输出。

标签: awk


【解决方案1】:

如果你可以移除管道,下面的加号和 - 符号是解决方案 -

cat file1
1 6 RD 12-05-17
2 4 SB 15-05-17
3 3 TD 02-04-17
4 5 SB 15-01-17

cat file2
3 C 100
4 A 200
5 B 300

awk 'NR==FNR{a[$1]=$2FS$3;next} $2 in a {print $0, a[$2]}' file2 file1
2 4 SB 15-05-17 A 200
3 3 TD 02-04-17 C 100
4 5 SB 15-01-17 B 300

【讨论】:

  • ^1很好的演讲vipin,很高兴看到你也在学习和帮助他人
猜你喜欢
  • 2013-06-24
  • 2013-10-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-16
  • 1970-01-01
  • 2012-05-29
相关资源
最近更新 更多