如何删除file1中第三列值存在于file2中的行?
解决方法:删除file1中第三列存在于file2的行
先帮你梳理下问题所在,你之前的命令在文件顺序和数组存储逻辑上出了问题,咱们一步步修正:
错误原因分析
你当前的命令把file1放在了前面,NR==FNR会优先处理file1,但我们需要先把file2里要排除的目标值存入数组,再去过滤file1。另外,你用a[$1]=$3的存储逻辑没必要——file2每行就是要排除的第三列值,直接把这些值作为数组的键就够了。
正确命令
awk -F',' 'NR==FNR {a[$1]=1; next} !($3 in a)' file2 file1
如果需要确保输出的分隔符还是逗号(其实默认会保留原格式,明确设置更稳妥),可以加上OFS=',':
awk -F',' -v OFS=',' 'NR==FNR {a[$1]=1; next} !($3 in a)' file2 file1
命令拆解说明
-F',':指定输入的字段分隔符为逗号NR==FNR {a[$1]=1; next}:处理第一个文件(file2)时,把每行内容(也就是要排除的第三列值)存入数组a,键为该行内容,值设为1;next跳过后续逻辑,继续处理下一行!($3 in a):处理第二个文件(file1)时,判断当前行的第三列是否不在数组a中,满足条件就打印该行(awk默认会执行print)
测试结果验证
用你给出的示例文件执行命令后,会输出你期望的结果:
14769,marty.------@googlemail.com,c076a7b6a52857ddf2f2e60d71dda6bf,49
14770,maryfi-------@googlemail.com,23fc2887a3a8248ddea570b5700b1708,49
14771,n.s------@googlemail.com,e504a6617f375ce04f4e51f1ec66dd93,49
14772,paula------@googlemail.com,f918f5b8df1d6285892d003c2fb9e3cf,49
内容的提问来源于stack exchange,提问作者maydeb asiq
相关产品推荐
相关产品推荐

