我有两个文件: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
但是它什么也没做。
答案 0 :(得分:1)
$ 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
答案 1 :(得分:1)
这可能对您有用(GNU sed):
sed 's/[^[:alnum:]]/\\&/g;s/.*/s#&\\s*##g/' fileB | sed -f - fileA
这将使用fileB创建一个sed脚本,该脚本将删除fileB中的所有单词,然后删除fileA中可能的空格。
答案 2 :(得分:0)
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