在AIX的ksh环境中如何计算两个文件列表的差异
在AIX ksh中获取list1独有的文件列表
以下是几个通用的解决方案,不依赖文件扩展名:
方法1:使用grep(最直接的方式)
利用grep的固定字符串匹配和反向筛选功能,直接找出list1中不在list2里的行:
grep -Fxvf list2 list1
参数说明:
-F:将匹配模式视为固定字符串,避免正则表达式干扰-x:仅匹配整行内容,防止部分匹配导致错误结果-v:反向匹配,输出不匹配的行-f:从list2文件中读取匹配模式
方法2:使用comm命令(适合有序文件)
comm专门用于对比两个有序文件的差异,通过参数控制只输出list1独有的内容:
如果你的ksh支持进程替换,可以直接用:
comm -23 <(sort list1) <(sort list2)
如果不支持进程替换,先排序到临时文件再处理:
sort list1 > sorted_list1 sort list2 > sorted_list2 comm -23 sorted_list1 sorted_list2 rm sorted_list1 sorted_list2
参数说明:-23表示不显示list2独有的列(第2列)和两者共有的列(第3列),只保留list1独有的列(第1列)
方法3:使用awk(通用无序文件处理)
用awk数组存储list2的内容,再遍历list1输出不在数组中的行:
awk 'NR==FNR { arr[$0] = 1; next } !arr[$0]' list2 list1
逻辑说明:
- 处理第一个文件list2时,将每行内容作为键存入数组
arr - 处理第二个文件list1时,输出不在
arr中的行
内容的提问来源于stack exchange,提问作者emfi
相关产品推荐
相关产品推荐

