awk-比较两个文件的两列并打印公共行

awk-比较两个文件的两列并打印公共行

我知道这个平台上已经回答了我的一些相同问题,但我尝试了几个小时的所有解决方案,却找不到我的错误。因此,如果能提供任何提示或帮助,帮助我解决我做错的事情,我将不胜感激。

像这儿https://unix.stackexchange.com/questions/216511/comparing-the-first-column-of-two-files-and-printing-the-entire-row-of-the-secon和这里我如何比较两个文件中的数据以识别共同数据和独特数据?我有两个文件,我想过滤掉文件 2 中与文件 1 中的第 1 列匹配的行。在我看来,针对相同问题提出的解决方案应该有效,但不幸的是,它们没有。我的文件是制表符分隔的。

文件_1.txt

apple
great
see
tree

文件_2.txt

apple    5.21      Noun
around   6.21      Adverb
great    2         Adjective
bee      1         Noun
see      7.43      Verb
tree     3         Noun

输出应如下所示:

apple    5.21      Noun
great    2         Adjective
see      7.43      Verb
tree     3         Noun

我试过通讯-12,

awk (e.g awk 'NR==FNR{a[$1];next} ($1 in a)' file_1.txt file_2.txt > output.txt)

我知道这可能是一个愚蠢的问题,我提前道歉。但我似乎无法弄清楚。

答案1

其中一种方法是这样的:

awk '   BEGIN { while ((getline <"file2.txt") > 0) {REC[$1]=$0}}
    {print REC[$1]}' <file1.txt

开头的 getline 读取 file2.txt 并将其存储在数组中REC,由第一条记录索引。

然后,代码的“主要”部分读取 file1.txt 的内容,并简单地使用该行上的第一个字从现在存储在 中的 file2.txt 中查找相应的行REC

示例输出:

apple    5.21      Noun
great    2         Adjective
see      7.43      Verb
tree     3         Noun 

相关内容