awk getcolumn var 而不是 getline var

awk getcolumn var instead of getline var

awk 具有我经常使用的 'getline var' 函数来提取文件的行,其中特定列(下例中的第 2 列)与另一个文件的行匹配:

awk 'BEGIN {while(getline each_line < "patterns_file.txt") my_patterns[each_line]}  in my_patterns' file_to_search.txt

相反,如果数组 my_patterns 有多个列并且我只需要一个特定的列进行匹配(比如说第 4 列),我如何才能只从 patterns_file.txt 中获取指定的列到数组 my_patterns 中,类似于:

awk 'BEGIN {while(getcolumn each_4th_column < "patterns_file.txt") my_patterns[each_4th_column]}  in my_patterns' file_to_search.txt

你问题中的代码是awk中的反模式。做你想做的推荐方法是这样的:

awk 'NR==FNR {my_patterns[];next}  in my_patterns' patterns_file.txt file_to_search.txt

在这种情况下无需手动使用 getline。相反,第一个块针对第一个文件运行并在数组中设置键。 FNR==NR 是确定正在处理第一个文件的惯用方式(因为 FNR 是当前文件中的记录数,而 NR 是总记录数)。使用next表示第一个文件跳过块外的部分。