3

嗨,我必须删除文件中的一些行:

file 1
1 2 3
4 5 6

file 2
1 2 3 6
5 7 8 7
4 5 6 9

我必须删除在文件 2 中找到的文件 1 的所有行:

output
5 7 8 7

我使用了 sed:

for sample_index in $(seq 1 3)
do
  sample=$(awk 'NR=='$sample_index'' file1)
  sed "/${sample}/d" file2 > tmp
done

但它不起作用。它不打印任何东西。你有什么想法吗?它给了我“sed:-e 表达式#1,char 0:需要先例正则表达式”的错误

4

3 回答 3

4

这可能是一个开始:

$ grep -vf file1 file2
5 7 8 7

这里的一个潜在陷阱是,如果您将5 6 9. file1我不确定你是否想要。如果没有,你可以试试

grep -vf <(sed 's/^/^/' file1) file2
于 2013-06-20T15:39:11.620 回答
3

如果您的真实数据为 3 列,这应该可以工作:

awk 'NR==FNR{a[$1$2$3]++;next}!($1$2$3 in a)' file{1,2}

对于可变列:

awk 'NR==FNR{a[$0]++;next}{for(x in a) if(index($0,x)>0) next}1' file{1,2}
于 2013-06-20T15:37:46.367 回答
2

以及 GNU

sed -r 's#(.*)#/\1/d#' file1 | sed -f - file2
于 2013-06-20T16:34:21.393 回答