使用第一列的相同模式提取 file1 的子集,并将第二列值与 file2 进行比较

使用第一列的相同模式提取 file1 的子集,并将第二列值与 file2 进行比较

文件1

a   1
a   2
a   3
b   2
b   3
b   4
b   5

文件2

2
4
3
1

输出

a   1
a   2
a   3

从文件 1 中删除“b”值,只需要保留“a”值,因为第二列中的“b”对应值之一(文件 1 中的“5”)不在文件 2 中。

因此,基本上我需要基于具有相同模式的第一列创建 file1 的子集,并使用相应的第二列值创建索引数组并在第二个文件中搜索。如果第二个文件中缺少任何值,那么我想丢弃完整的子集。

我可以提取与 file1 第二列值与 file2 第一列值匹配的行。我试图根据第一列和数组索引找出创建子集。

暂时,我通过两个简单的步骤做到了这一点:

第一步:

awk '{print $1}' file1| sort | uniq -c | sed 's/^ *//g'| sed 's/ /_/g'|sort > file1_modified.txt
output:
3_a
4_b

第二步:打印 file1 的行,如果 file2 的值位于 pf file1 的第二列中,并与 file1_modified.txt 进行比较以获取匹配的行,然后使用输出从 file1 中提取行

awk 'FNR==NR{a[$1];next}($2 in a){print}' file2 file1|awk '{print $1}'| sort | uniq -c | sed 's/^ *//g'| sed 's/ /_/g'|sort|comm -12 - file1_modified.txt| awk '{FS="_"}{print $2}'| grep -f - file1
output:
a   1
a   2
a   3

希望我能以更好的方式解释它,如果有人能提供一些建议,将会有所帮助。

相关内容