比较不同CSV中的列然后打印不匹配

时间:2017-12-01 01:00:19

标签: bash csv command-line-interface

我是一名脚本新手,我正在寻找帮助来构建一个BASH脚本来比较不同CSV文档中的不同列,然后打印不匹配。我在下面列举了一个例子。

文件1 员工ID号,姓氏,名字,首选名称,电子邮件地址

文件2 员工姓名,电子邮件地址

我想比较两个文件中的电子邮件地址列。如果文件1不包含在文件2中找到的电子邮件地址,我想输出到新文件。

提前致谢!

2 个答案:

答案 0 :(得分:0)

我就是这样做的:

#!/bin/bash
#
>output.txt

# Read file2.txt, line per line...
cat file2.txt | while read line2
do
    # Extract the email from the line
    email2=$(echo $line2 | cut -d',' -f2)

    # Verify if the email is in file1
    if [ $(grep -c $email2 file1.txt) -eq 0 ]
    then
        # It is not, so output the line from file2 to the output file
        echo $line2 >>output.txt
    fi
done

答案 1 :(得分:0)

电子邮件地址不区分大小写,在比较它们时应该考虑。此版本使用一个小awk来处理案例位并选择每行中的最后一个字段($NF):

#!/bin/bash

our_addresses=( $(awk -F, '{print tolower($NF)}' file1) )
while read -r line; do
    this_address=$(awk -F, '{print tolower($NF)}' <<< "$line")
    if [[ ! " ${our_addresses[@]} " =~ " $this_address " ]]; then
        echo "$line"
    fi
done < file2