linux - 比较两个文本文件,如果第二个文件的行包含第一个文件的两列,则删除该行
问题描述
我有两个文件,如下所示。file1 有两列,file2 有不同数量的列,具体取决于行。我想比较这两个文件,如果 file1 的 $1 和 $2 都在 file2 的一行中,我想删除该行。file2 也用逗号分隔。如何使用 awk 做到这一点?或任何其他文本处理工具?
文件 1
5052 5051
4952 4951
文件2
2001, 5052, 7001, 5051, 1000
2002, 5052, 7001, 1500, 2500
2003, 5051, 3500, 4500, 4952
2004, 4952, 4999, 4500, 4951
预期输出:
2002, 5052, 7001, 1500, 2500
2003, 5051, 3500, 4500, 4952
我试过下面的 awk 代码但没有运行。
awk 'NR==FNR{A[$1]=$1;A[$2]=$2; next} {if ($0=A[$1] && $0=A[$2]){next} else {print $0}' file1 file2 >> test.inp
解决方案
这假设 file1 中的对在两个字段中永远不会具有相同的值:
$ cat tst.awk
NR==FNR {
pairs1[NR] = $1
pairs2[NR] = $2
next
}
{
orig = $0
gsub(/[[:space:],]+/," ")
delete vals
for (i=1; i<=NF; i++) {
vals[$i]
}
for (nr in pairs1) {
if ( (pairs1[nr] in vals) && (pairs2[nr] in vals) ) {
next
}
}
print orig
}
$ awk -f tst.awk file1 file2
2002, 5052, 7001, 1500, 2500
2003, 5051, 3500, 4500, 4952
推荐阅读
- wordpress - Woocommerce 结帐:如果产品来自不同类别,则创建自定义费用
- android - MotionLayout and constraint Groups
- java - Hibernate XML - 具有一对一映射的复合 ID
- ios - 在 IOS 模拟器和设备上使用 ConnectionRequest 显示数据库中的数据
- python - Python:如果失败,我如何复制文件并进行回滚
- django - REST 中的多对多字段和嵌套序列化程序:覆盖嵌套序列化程序不会在 Django 中创建嵌套对象
- javascript - 如何在带有 if 条件的 for-in 循环中开玩笑地增加分支覆盖率?
- powerquery - 如何使用 List.Generate 作为循环
- python - 转义序列在python中显示
- php - 如何有条件地覆盖 Eloquent 模型中的值?