两文件按首列匹配筛选需求:输出文件1匹配成功的完整行
需求实现方案
Linux/Unix 环境命令行实现
方法1:awk 命令(无需提前排序,推荐使用)
直接执行以下命令即可得到符合要求的结果:awk -F ':' 'NR==FNR{a[$1];next} ($1 in a)' file2 file1
参数说明:
-F ':'指定file1的列分隔符为冒号,适配示例中的两列格式NR==FNR{a[$1];next}读取第一个输入文件(file2)时,将所有行内容作为键存入数组a($1 in a)读取第二个输入文件(file1)时,判断当前行第一列是否存在于数组a中,存在则输出整行内容
方法2:join 命令(需先对文件排序)
如果习惯用join工具,可执行以下命令:join -t ':' <(sort file1) <(sort file2)
参数说明:
-t ':'指定字段分隔符为冒号<(sort file1)、<(sort file2)先对两个文件按第一列排序,满足join命令的输入要求- join默认输出两个文件第一列匹配的行,自动保留file1的完整两列内容
跨平台Python实现(支持Windows、Mac、Linux)
无需安装第三方依赖,直接运行以下代码即可,结果会输出到当前目录的output文件中:
# 读取file2的所有匹配键存入集合 with open("file2", "r", encoding="utf-8") as f2: match_keys = {line.strip() for line in f2 if line.strip()} # 遍历file1匹配输出 with open("file1", "r", encoding="utf-8") as f1, open("output", "w", encoding="utf-8") as out_f: for line in f1: line = line.strip() if not line: continue current_key = line.split(":")[0] if current_key in match_keys: out_f.write(f"{line}\n")
内容的提问来源于stack exchange,提问作者SoSander
相关产品推荐
相关产品推荐

