Bash 从文件B的列表中删除文件A中的所有单词
我有两个文件:A和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
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