我是一名脚本新手,我正在寻找帮助来构建一个BASH脚本来比较不同CSV文档中的不同列,然后打印不匹配。我在下面列举了一个例子。
文件1 员工ID号,姓氏,名字,首选名称,电子邮件地址
文件2 员工姓名,电子邮件地址
我想比较两个文件中的电子邮件地址列。如果文件1不包含在文件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