首先,我必须道歉:我知道有很多不同的主题已经回答了我的问题,但正如你自己所看到的,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
是的,我知道。听起来很糟糕。
那边有英雄吗?
答案 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