gpt4 book ai didi

awk - 匹配列一个单独的文件并将匹配项附加到文件

转载 作者:行者123 更新时间:2023-12-04 12:24:14 25 4
gpt4 key购买 nike

我正在尝试使用 awk 合并在单个列上过滤的两个文件。然后我想做的是将文件 2 中的相关列附加到文件 1 中。

用虚拟示例更容易解释。

文件 1

name   fruit   animal
bob apple dog
jim orange cat
gary mango snake
daisy peach mouse

文件2:
 animal number  shape
cat eight square
dog nine circle
mouse eleven sphere

期望的输出:
 name   fruit   animal  shape   
bob apple dog circle
jim orange cat square
gary mango snake NA
daisy peach mouse sphere

步骤 1:需要过滤文件 1 中的第 3 列和文件 2 中的第 1 列
awk -F'\t' 'NR==FNR{c[$3]++;next};c[$1] > 0' file1 file2
这给了我输出:
cat    eight   square
dog nine circle
mouse eleven sphere

这对我有所帮助,但是我不能简单地从上面的输出中剪切第三列(形状)并将其附加到文件 1,因为文件 2 中没有“蛇”的条目。我需要能够将输出的第 3 列附加到匹配成功的文件 1 中,并且不放置“NA”。必须保留 file1 中的所有行,因此我不能省略它们。这就是我被卡住的地方!

我很感激任何帮助....

最佳答案

您能否尝试根据 GNU awk 中显示的样本进行以下、编写和测试? .

awk '
BEGIN{
OFS="\t"
}
FNR==NR{
a[$1]=$NF
next
}
{
print $0,($3 in a?a[$3]:"NA")
}' Input_file2 Input_file1

说明:为上述添加详细说明。
awk '                               ##Starting awk program from here.
BEGIN{ ##Starting BEGIN section from here.
OFS="\t" ##Setting TAB as output field separator here.
}
FNR==NR{ ##Checking condition FNR==NR which will be TRUE when first Input_file file2 is being read.
a[$1]=$NF ##Creating array a with index $1 and value is $NF for current line.
next ##next will skip all further statements from here.
}
{
print $0,($3 in a?a[$3]:"NA") ##Printing current line and checking if 3rd field is present in array a then print its value OR print NA.
}' file2 file1 ##Mentioning Input_file names here.

关于awk - 匹配列一个单独的文件并将匹配项附加到文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62344464/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com