Shell 比较2个文件并从文件中提取元素

Shell 比较2个文件并从文件中提取元素,shell,awk,Shell,Awk,我有两个文件。其中一个有姓名列表(只有一列),第二个文件有三列,分别是姓名、电话号码、国家/地区 我想要的是提取那些名字不在文件1中,但只存在于文件2中的人的数据 #!/bin/bash for i in `cat file1 ` do cat file2 | awk '{ if ($1 != "'$i'") {print $1 "\t" $2 "\t" $3 }}'>>NonResp done 我得到的是一个奇怪的结果,数据比预期的要多 请帮忙 awk

我有两个文件。其中一个有姓名列表(只有一列),第二个文件有三列,分别是姓名、电话号码、国家/地区

我想要的是提取那些名字不在文件1中,但只存在于文件2中的人的数据

#!/bin/bash

for i in `cat file1 `
   do
      cat file2 | awk '{ if ($1 != "'$i'") {print $1 "\t" $2 "\t" $3 }}'>>NonResp
   done
我得到的是一个奇怪的结果,数据比预期的要多

请帮忙

awk '{print $1}' file2 | comm -1 -3 file1 - | join file2 -
文件必须已排序,才能正常工作。 说明:

=> awk '{print $1}' file2 |
仅打印file2的第一个fileld并将其提供给下一个命令(|)

比较file1和最后一个命令(-)的输出,并仅抑制file1(-1)中的行以及两个文件(-3)中的行;这将只在文件2中保留行,并将其提供给下一个命令(|)

将原始文件2和最后一个命令(-)的输出连接起来,写出匹配行的字段(但是字段之间的空白被截断)

测试用例:

cat <<EOF >file1 alan bert cindy dave fred sunny ted EOF cat <<EOF >file2 bert 01 AU cindy 03 CZ ginny 05 CN ted 07 CH zorro 09 AG EOF awk '{print $1}' file2 | comm -1 -3 file1 - | join file2 - 猫 文件必须已排序,才能正常工作。 说明:

=> awk '{print $1}' file2 |
仅打印file2的第一个fileld并将其提供给下一个命令(|)

比较file1和最后一个命令(-)的输出,并仅抑制file1(-1)中的行以及两个文件(-3)中的行;这将只在文件2中保留行,并将其提供给下一个命令(|)

将原始文件2和最后一个命令(-)的输出连接起来,写出匹配行的字段(但是字段之间的空白被截断)

测试用例:

cat <<EOF >file1 alan bert cindy dave fred sunny ted EOF cat <<EOF >file2 bert 01 AU cindy 03 CZ ginny 05 CN ted 07 CH zorro 09 AG EOF awk '{print $1}' file2 | comm -1 -3 file1 - | join file2 -
cat假设字段分隔符在文件2中为“

如果“
”不是分隔符,那么

awk 'FNR==NR{a[$1];next}!($1 in a)' file1 file2

就足够了。

假设字段分隔符在文件2中为“

如果“
”不是分隔符,那么

awk 'FNR==NR{a[$1];next}!($1 in a)' file1 file2

就足够了。

您可以使用
grep
来完成此操作:

grep -v -F -f file1 file2

您可以使用
grep

grep -v -F -f file1 file2

这与PYthon有什么关系?经过两分钟的搜索,我找到了。这与PYthon有什么关系?经过两分钟的搜索,我找到了。