使用awk加入两个文件

时间:2014-04-08 18:14:28

标签: unix join

File 1
---------+
|ID |
+---------+
|      15 |
|      45 |
|      18 |
|      76 |
|      29 |
|      10 |
|      40 |
+---------+
File 2:

| ID Name |
+---------+
| 12 abc  |
| 18 nop  |
| 15 ujh  |
| 30 jkl  |
| 15 lmn  |
| 18 tre  |
| 19 hgt  |
+---------+

Desired output:
+---------+
| ID Name |
+---------+
| 18 nop  |
| 15 ujh  |
| 15 lmn  |
| 18 tre  |
+---------

下面的Join cammand没有给出所需的结果(它应该返回文件2中File1表中存在第一列中的值的所有行。

加入-1 1 -2 1 File1.txt File2.txt

请帮忙。

1 个答案:

答案 0 :(得分:1)

好吧,既然你专门提出了一个awk解决方案,那么这就是一种方法:

#!/bin/sh

awk 'BEGIN {
    while ((getline line < "File1.txt") > 0) {
        split(line, a)
        for (fld in a) {
            if (a[fld] ~ /^[0-9]*$/ ) {
                targets[a[fld]]=a[fld]
            }
        }
    }
} {
    if (NF == 4 && $2 ~ /^[0-9]*$/ ) {
        if ($2 in targets) {
            print $0
        }
    } else {
        print $0
    }
}' File2.txt

虽然我很想知道如果你有权访问它,为什么你不会从数据库中获取这个输出。