如何比较 2 个文件中的数据,然后创建一个按文件 2 的顺序包含缺失数据的输出文件

如何比较 2 个文件中的数据,然后创建一个按文件 2 的顺序包含缺失数据的输出文件

我是 shell 脚本新手,想创建以下内容。我相信我可以使用类似的东西grep -xvFf file1 file2,但我不确定如何以正确的顺序创建输出文件。

我有 file1 如下:

CustomerName     CustomerID
Joe                  1
Kenny                2
Craig                3
Pearl                4

file2 有以下内容:

CustomerName      CustomerID
Pearl
Kenny
Joe
Craig

所以我想要完成的是创建两个文件的比较以查找丢失的数据,然后将该数据输出到第三个文件中,其顺序与 file2 相同。因此输出文件如下所示:

CustomerName      CustomerID
Pearl                 4
Kenny                 2
Joe                   1
Craig                 3

任何见解都会很棒

答案1

使用awk

awk 'NR==1 { print; }
     NR==FNR && FNR>1{ customerIds[$1]=$2; next }
     FNR>1 && ($1 in customerIds) { print $1, customerIds[$1]; }
' OFS='\t' file1 file2

使用 时打印一次标题行NR==1 { print; }
然后存储来自文件1customerIds到一个名为(键是 customerName $1,值是 Ids )的关联数组中$2

NR==FNR && FNR>1{ customerIds[$1]=$2; next }

接下来我们检查文件2,如果数组中存在 customerName,customerIds则打印 customerName,$1后跟我们上面保存的同一数组中的 Id。

FNR>1 && ($1 in customerIds) { print $1, customerIds[$1]; }

答案2

$ awk 'NR==FNR{a[$1]=$0; next} $1 in a{print a[$1]}' file1 file2
CustomerName     CustomerID
Pearl                4
Kenny                2
Joe                  1
Craig                3

相关内容