shell 根据文件1,删除文件2中的内容

来源:互联网 发布:叮叮当客服平台软件 编辑:程序博客网 时间:2024/06/05 11:18

方法1,如果文件之间存在包含,用grep
grep -vFf f1 f2 即可 保留f2中多的,反之,f1多的
$more 1

a,1
n,2
c,3
w,4
v3,5
$more 3

1
3
$grep -vFf 3 1 结果把v3项误删,用-w 完全匹配 可避免误删,如下

n,2
w,4
grep -vwFf 3 1
n,2
w,4
v3,5
方法2,如果是多列,根据指定列,删除,用awk
more 1 2
a,1
n,2
c,3
w,4
v,5
1,a,f
3,4,f
4,5,g
awk -F”,” ‘NR==FNR {a[1]} NR>FNR&&!(2 in a)’ 1 2
3,4,f
4,5,g
awk -F”,” ‘NR==FNR {a[1]} NR>FNR&&!(2 in a)’ 2 1
n,2
v,5
这里写图片描述
理解起来是,用文件的指定列作为数组,比较另一文件的指定列,如果不包含,就输出。
如果文件1的第二列,不在文件2的第一列组成的数组([a,1 c,3 w,4])中,
就输出(n,2 和 v,5)。