我有两个文件。一个包含名称列表(只有一列),第二个文件包含三个包含姓名,电话号码,国家/地区的列。
我想要的是提取名称在文件1中不存在但仅存在于file2中的人的数据。
#!/bin/bash
for i in `cat file1 `
do
cat file2 | awk '{ if ($1 != "'$i'") {print $1 "\t" $2 "\t" $3 }}'>>NonResp
done
我得到的是一个奇怪的结果,数据多于预期。
请帮助。
答案 0 :(得分:1)
awk '{print $1}' file2 | comm -1 -3 file1 - | join file2 -
必须已对文件进行排序才能使其正常工作。 说明:
=> awk '{print $1}' file2 |
仅打印file2的第一个fileld并将其提供给下一个命令(|)
=> comm -1 -3 file1 - |
比较file1和最后一个命令的输出( - )并仅抑制file1(-1)中的行以及两个文件中的行(-3);只留下file2中的行并将其提供给下一个命令(|)
=> join file2 -
加入原始文件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 -
答案 1 :(得分:1)
假设file2中的字段分隔符为“,
”
awk -F, 'FNR==NR{a[$1];next}!($1 in a)' file1 file2
如果“,
”不是分隔符,那么只需
awk 'FNR==NR{a[$1];next}!($1 in a)' file1 file2
就足够了。
答案 2 :(得分:1)
您可以使用grep
:
grep -v -F -f file1 file2