文件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
希望我能以更好的方式解释它,如果有人能提供一些建议,将会有所帮助。