linux - 如何删除列 file1 中的行

标签 linux awk

我有一个包含 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/

相关文章:

Linux + Apache检测每个Vhost的连接计数?

linux - 如何在 linux 中将多个子文件夹压缩成单独的文件?

c - 从 shell 返回值到 C 程序

linux - 如何在 shell 脚本中的正斜杠前插入反斜杠?

linux - 如何在 shell 脚本中删除模式匹配前后的特定字符?

linux - man 找不到与符号链接(symbolic link)指向的源文件关联的手册页

linux - linux内核中的大尺寸kmalloc kmalloc

awk - 如何使用 awk 将一组数字保留在多个数组中并打印最大值?

c++ - 在我的代码中用 [] 替换 .at()

python - 如何从两列中提取数字范围并将两列中的范围打印为元组?