AWK 从文件比较中打印出不匹配的记录
AWK print out the mis-matched records from files comparison
我需要你的帮助来从 AIX 6.x.
上的以下示例中找到 Employee.txt 中不匹配的列表
Employee.txt
1|Sam|Smith|Seatle
2|Barry|Jones|Seatle
3|Garry|Brown|Houston
4|George|Bla|LA
5|Celine|Wood|Atlanta
6|Jody|Ford|Chicago
Car.txt
100|red|1
110|green|9
120|yellow|2
130|yellow|6
140|red|8
150|white|0
bash-4.3$ awk -F"|" 'NR==FNR { empcar[]=[=11=]; next } { if (empcar[]) print empcar[] "|" "|" > "match.txt"; else print [=11=] > "no_match.txt" }' Employee.txt Car.txt
110|green|9
140|red|8
150|white|0
match.txt
1|Sam|Smith|Seatle|100|red
2|Barry|Jones|Seatle|120|yellow
6|Jody|Ford|Chicago|130|yellow
no_match.txt
110|green|9
140|red|8
150|white|0
bash-4.3$ awk -F"|" 'NR==FNR { empcar[]=[=11=]; next } !( in empcar)' employee.txt car.txt produced the same list as in the no_match.txt.
但是,我希望 no_match.txt 如下所示:
3|Garry|Brown|Houston
4|George|Bla|LA
5|Celine|Wood|Atlanta
也就是说,当没有员工编号时,打印Employee.txt中的行。在 Car.txt。我不知道如何在 else 语句中引用那些不匹配的记录。
我在match.txt中也遇到了很多不明原因的重复,我的私人机密数据不能公开。
非常感谢,
乔治
print the row in Employee.txt
when does not have employee no. in Car.txt
.
您可以使用此解决方案:
awk -F"|" '
NR == FNR {
empcar[]
next
}
{
print > ( in empcar ? "match.txt" : "no_match.txt")
}' Car.txt Employee.txt
cat match.txt
1|Sam|Smith|Seatle
2|Barry|Jones|Seatle
6|Jody|Ford|Chicago
cat no_match.txt
3|Garry|Brown|Houston
4|George|Bla|LA
5|Celine|Wood|Atlanta
请注意,我们将 Car.txt
作为第一个文件处理,并将第三个字段中的所有 ID 存储在数组 empcar
中。稍后在处理 Employee.txt
时,我们只是根据条件重定向输出以匹配或不匹配,如果来自后面文件的 </code> 是否存在于关联数组 <code>empcar
中。
我需要你的帮助来从 AIX 6.x.
上的以下示例中找到 Employee.txt 中不匹配的列表Employee.txt
1|Sam|Smith|Seatle
2|Barry|Jones|Seatle
3|Garry|Brown|Houston
4|George|Bla|LA
5|Celine|Wood|Atlanta
6|Jody|Ford|Chicago
Car.txt
100|red|1
110|green|9
120|yellow|2
130|yellow|6
140|red|8
150|white|0
bash-4.3$ awk -F"|" 'NR==FNR { empcar[]=[=11=]; next } { if (empcar[]) print empcar[] "|" "|" > "match.txt"; else print [=11=] > "no_match.txt" }' Employee.txt Car.txt
110|green|9
140|red|8
150|white|0
match.txt
1|Sam|Smith|Seatle|100|red
2|Barry|Jones|Seatle|120|yellow
6|Jody|Ford|Chicago|130|yellow
no_match.txt
110|green|9
140|red|8
150|white|0
bash-4.3$ awk -F"|" 'NR==FNR { empcar[]=[=11=]; next } !( in empcar)' employee.txt car.txt produced the same list as in the no_match.txt.
但是,我希望 no_match.txt 如下所示:
3|Garry|Brown|Houston
4|George|Bla|LA
5|Celine|Wood|Atlanta
也就是说,当没有员工编号时,打印Employee.txt中的行。在 Car.txt。我不知道如何在 else 语句中引用那些不匹配的记录。
我在match.txt中也遇到了很多不明原因的重复,我的私人机密数据不能公开。
非常感谢, 乔治
print the row in
Employee.txt
when does not have employee no. inCar.txt
.
您可以使用此解决方案:
awk -F"|" '
NR == FNR {
empcar[]
next
}
{
print > ( in empcar ? "match.txt" : "no_match.txt")
}' Car.txt Employee.txt
cat match.txt
1|Sam|Smith|Seatle
2|Barry|Jones|Seatle
6|Jody|Ford|Chicago
cat no_match.txt
3|Garry|Brown|Houston
4|George|Bla|LA
5|Celine|Wood|Atlanta
请注意,我们将 Car.txt
作为第一个文件处理,并将第三个字段中的所有 ID 存储在数组 empcar
中。稍后在处理 Employee.txt
时,我们只是根据条件重定向输出以匹配或不匹配,如果来自后面文件的 </code> 是否存在于关联数组 <code>empcar
中。