Bash 从文件B的列表中删除文件A中的所有单词

Bash 从文件B的列表中删除文件A中的所有单词,bash,awk,sed,Bash,Awk,Sed,我有两个文件:A和B A部分的内容: p218 first_departure_date p219 2017-01-03 p220 sg40 Joe p221 expire_date 222 11-09-2024 p223 dob 224 00-00-0000 p225 gender 226 MR p227 last_departure_date 228 2017-01-03 文件B中的内容: p219 p218 p220 p22

我有两个文件:A和B

A部分的内容:

p218    first_departure_date    p219    2017-01-03  p220    sg40    Joe p221    expire_date 222 11-09-2024  p223    dob 224 00-00-0000  p225    gender  226 MR  p227    last_departure_date 228 2017-01-03
文件B中的内容:

p219
p218
p220
p221
p227
p223
p225
p228
预期成果:

first_departure_date    2017-01-03  sg40    Joe expire_date 11-09-2024  dob 00-00-0000  gender  MR  last_departure_date 2017-01-03
现在,我想从文件B中删除文件A中出现的所有行

我尝试过以下方法:

grep -vxFf fileB fileA > fileC
但它什么也没做。

$awk'
$ awk '
    NR==FNR { b[$1]; next }
    {
        c = 0
        for (i=1; i<=NF; i++) {
            if ( !($i in b) ) {
                printf "%s%s", (c++ ? OFS : ""), $i
            }
        }
        print ""
    }
' fileB fileA
first_departure_date 2017-01-03 sg40 Joe expire_date 222 11-09-2024 dob 224 00-00-0000 gender 226 MR last_departure_date 228 2017-01-03
NR==FNR{b[$1];next} { c=0 对于(i=1;i这可能适用于您(GNU-sed):

这将使用fileB创建sed脚本,该脚本删除fileB中的任何单词,然后从fileA中删除可能的空白

awk '{print "s/"$0"//"}' fileB > out
sed -f out fileA -e 's/^[ ]//'
样本输出:

first_departure_date        2017-01-03      sg40    Joe     expire_date 222 11-09-2024      dob 224 00-00-0000      gender  226 MR      last_departure_date 228 2017-01-03

wrt
我想从文件B中删除文件A中出现的所有行
-你的意思是相反的,对吗?
first_departure_date        2017-01-03      sg40    Joe     expire_date 222 11-09-2024      dob 224 00-00-0000      gender  226 MR      last_departure_date 228 2017-01-03