Unix下对比两文件第2列,筛选不匹配记录的awk命令求助
修正Awk命令实现两文件第2列对比筛选
需求说明
在Unix环境下,以@为分隔符,对比两个文件的第2列,将Filename_clientid.txt中第2列未在Client_id.txt第2列出现的记录写入输出文件。
示例文件内容
Filename_clientid.txt
RIA00024_MA_plan_BTR_09282022_4.xml@RIA00025 RIA00024_MA_plan_BTR_09282022_5.xml@RIA00024 RIA00026_MA_plan_BTR_09282022_6.xml@RIA00026
Client_id.txt
ramesh@RIA000025 suresh@RIA000024 vamshi@RIA000027
预期输出
RIA00026_MA_plan_BTR_09282022_6.xml@RIA00026
原命令问题解析
原使用的Awk命令:
awk -F '@' 'NR==FNR{a[$2]; next} FNR==1 || !($1 in a)' Client_id.txt Filename_clientid.txt
存在两个关键错误:
- 对比字段错误:处理
Filename_clientid.txt时,错误地检查第1列是否在数组中,实际应该检查第2列 - 冗余逻辑:
FNR==1会强制保留目标文件的第一行,不符合需求筛选逻辑
修正后的命令
awk -F '@' 'NR==FNR{a[$2]; next} !($2 in a)' Client_id.txt Filename_clientid.txt
命令说明
-F '@':设置字段分隔符为@NR==FNR{a[$2]; next}:处理第一个文件Client_id.txt时,将每行第2列的值存入数组a,然后跳过后续操作!($2 in a):处理第二个文件Filename_clientid.txt时,判断当前行第2列是否不在数组a中,满足条件则输出整行
执行该命令即可得到预期输出。
内容的提问来源于stack exchange,提问作者suresh V
相关产品推荐
相关产品推荐

