Shell 比较2个文件并从文件中提取元素
我有两个文件。其中一个有姓名列表(只有一列),第二个文件有三列,分别是姓名、电话号码、国家/地区 我想要的是提取那些名字不在文件1中,但只存在于文件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
#!/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有什么关系?经过两分钟的搜索,我找到了。