通过AWK连接两个包含多列的文件

时间:2014-01-22 16:50:17

标签: awk

首先,我必须道歉:我知道有很多不同的主题已经回答了我的问题,但正如你自己所看到的,AWK并不是我真正的大朋友。

你们都知道这个故事吧? ;)“嘿随机的员工,你是被选中的员工!我需要你学习这个我们都不知道的奇怪的事情。你的截止日期是明天,祝你好运!”

我不会再抱怨了(承诺!:p),但经过多次尝试,我无法真正理解AWK的所有内容(谁说“一件事”?)。

所以,这是我的问题!

我有两个文件,包含以下列:

文件A.txt:

A B C D E F G H

文件B.txt:

A C F I

我希望通过在另一个文件中加入这两个文件来获得以下输出:

输出文件C.txt:

A B C D E F G H I

我想在它们之间建立连接,将“I”添加到已存在的包含A,C和F列的行,并删除其他行。

到目前为止,我知道我必须使用这样的东西:

awk '
    FNR==NR{Something ;next}
    {print $0}
' A.txt B.txt
是的,我知道。听起来很糟糕。

那边有英雄吗?

1 个答案:

答案 0 :(得分:4)

awk '
    NR==FNR {A[$1,$3,$6] = $0; next} 
    ($1 SUBSEP $2 SUBSEP $3) in A {print A[$1,$2,$3], $4}
' A.txt B.txt

这需要将整个文件A.txt存储在内存中。如果B.txt明显更小

awk '
    NR==FNR {B[$1,$2,$3] = $4; next}
    ($1 SUBSEP $3 SUBSEP $6) in B {print $0, B[$1,$3,$6]}
' B.txt A.txt