kcm*_*ana 1 shell sed awk perl mysql
列表1:
1,name1
2,name2
3,name3
4,name4
5,name5
6,name6
7,name7
8,name8
9,name9
Run Code Online (Sandbox Code Playgroud)
列表2:
3
13
14
6
1
7
15
26
Run Code Online (Sandbox Code Playgroud)
我需要这样的输出:
2,name
4,name
5,name
8,name
9,name
Run Code Online (Sandbox Code Playgroud)
输出应包含List1 的第 #1 列中不在List2 中的项目。
List1和List2未排序,但如果需要,我将对两个列表进行排序。
List1有大约 60,000 条记录,List2 包含 20,0000 条记录。需要使用 Linux shell 或mysql
.
假设bash
使用(否则,使用sort -o List1 List1
和sort -o List2 List2
和使用List1 List2
代替进程替换对输入文件进行预排序):
$ join -t, -v1 <( sort List1 ) <( sort List2 )
2,name2
4,name4
5,name5
8,name8
9,name9
Run Code Online (Sandbox Code Playgroud)
这会在您的两个文件之间执行关系 JOIN 操作,首先对它们的内容进行排序。该-t,
告诉join
对待逗号作为字段分隔符,并与-v1
我们要求在不与第二的任何条目加入的第一个文件中的条目。默认情况下,连接发生在每个文件的第一个字段上。
要从中去除最后一个整数:
join -t, -v1 <( sort List1 ) <( sort List2 ) | sed 's/[0-9]*$//'
Run Code Online (Sandbox Code Playgroud)
对于 MySQL 解决方案,您必须为所涉及的表提供 SQL 模式,但结果查询看起来像
SELECT * FROM table1 WHERE joinfield1 NOT IN (SELECT joinfield2 FROM table2);
Run Code Online (Sandbox Code Playgroud)