You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无网络Linux环境下,如何用Perl筛选List A中不在List B的内容?

无网络环境下用Perl筛选List A中不在List B的内容

核心思路

把List B的所有内容存入哈希表(实现快速查找),然后遍历List A的每一行,判断该行是否存在于哈希表中,不存在则输出,即可得到A中不在B里的内容。

可直接使用的Perl脚本

#!/usr/bin/perl
use strict;
use warnings;

# 检查输入参数是否正确
die "用法: $0 <list_b文件路径> <list_a文件路径>\n" unless @ARGV == 2;

my ($b_file, $a_file) = @ARGV;

# 加载List B到哈希表,用于快速查询
my %exists_in_b;
open my $b_handle, '<', $b_file or die "无法打开$b_file: $!";
while (my $line = <$b_handle>) {
    chomp $line;
    # 如果需要忽略行首行尾空格,可取消下面一行注释
    # $line =~ s/^\s+|\s+$//g;
    $exists_in_b{$line} = 1;
}
close $b_handle;

# 遍历List A,输出不在B中的内容
open my $a_handle, '<', $a_file or die "无法打开$a_file: $!";
while (my $line = <$a_handle>) {
    chomp $line;
    # 同上,需要忽略空格则取消注释
    # $line =~ s/^\s+|\s+$//g;
    print "$line\n" unless exists $exists_in_b{$line};
}
close $a_handle;

使用步骤

  1. 将上述代码保存为文件,比如filter_missing.pl
  2. 赋予脚本执行权限:chmod +x filter_missing.pl
  3. 运行脚本,传入List B和List A的路径:
    ./filter_missing.pl list_b.txt list_a.txt
    
    结果会直接输出到终端,如需保存到文件,可重定向:
    ./filter_missing.pl list_b.txt list_a.txt > missing_items.txt
    

注意事项

  • 脚本依赖Perl,而Perl是绝大多数Linux发行版默认预装的组件,无需额外安装
  • 如果两个列表的行内容存在前后空格差异,可取消脚本中去除空格的注释行,保证匹配准确性
  • 该方法处理大文件效率较高,哈希表的查找操作是常数时间,整体性能为线性时间复杂度

内容的提问来源于stack exchange,提问作者OLALOWO OLALEYE

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 07:36:10