我有一个包含 4 列的文件,如果第 3 列位于文件 2 中,我需要从 file1 中删除
示例:
文件1:
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
14773,pkec.------@googlemail.com,4ca2c5d670f324c31a20854873bf63ac,49
14774,squi-------@googlemail.com,d26a0296a361b79afd98ede1af918f6d,49
文件2:
d26a0296a361b79afd98ede1af918f6d
4ca2c5d670f324c31a20854873bf63ac
所以结果会是这样的
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
我已经尝试过这个
awk -F',' 'NR==FNR {a[$1]=$3 ;next} !($3 in a) {print }' OFS='\t' file1 file2
但不工作
最佳答案
我无法添加评论,因为没有足够的代表;但我已经用 gawk
尝试过您的代码,它确实按照您的需要删除了这两行。您没有获得制表符分隔输出的原因是 OFS 仅在重建 $0 后才生效,因此您可以通过简单的赋值来强制执行此操作,例如 $1=$1 和 OFS='\t':
{a[$1]=$3 ;next} !($3 in a) {$1=$1; print}' OFS='\t' file2 file1
结果:
14769 马蒂.------@googlemail.com c076a7b6a52857ddf2f2e60d71dda6bf 49
14770 玛丽菲------@googlemail.com 23fc2887a3a8248ddea570b5700b1708 49
14771 n.s------@googlemail.com e504a6617f375ce04f4e51f1ec66dd93 49
14772 保拉------@googlemail.com f918f5b8df1d6285892d003c2fb9e3cf 49
关于linux - 如何删除列 file1 中的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48471036/