两个文件上的grep反转匹配
例如,我有两个文本文件,每个文件包含一列- 文件A文件B 11 2.2 3.8 如果我做了两个文件上的grep反转匹配,grep,Grep,例如,我有两个文本文件,每个文件包含一列- 文件A文件B 11 2.2 3.8 如果我做了grep-f File\u A File\u B>File\u C,我会得到包含1和2的File\u C。我想知道如何在两个文件上使用grep-v,以便在上面的示例中获得不匹配的值3和8 谢谢 awk 'NR==FNR{a[$0]=$0;next} !($0 in a) {print a[(FNR)], $0}' f1 f2 3 8 要理解NR和FNR的含义,请检查以下打印输出 awk '{print N
grep-f File\u A File\u B>File\u C
,我会得到包含1和2的File\u C。我想知道如何在两个文件上使用grep-v,以便在上面的示例中获得不匹配的值3和8
谢谢
awk 'NR==FNR{a[$0]=$0;next} !($0 in a) {print a[(FNR)], $0}' f1 f2
3 8
要理解NR
和FNR
的含义,请检查以下打印输出
awk '{print NR,FNR}' f1 f2
1 1
2 2
3 3
4 4
5 1
6 2
7 3
8 4
条件
NR==FNR
用于从第一个文件提取数据,因为NR
和FNR
仅对第一个文件相同。如果允许空输出定界符,也可以使用comm
$ # -3 means suppress lines common to both input files
$ # by default, tab character appears before lines from second file
$ comm -3 f1 f2
3
8
$ # change it to empty string
$ comm -3 --output-delimiter='' f1 f2
3
8
注意:
comm
需要排序输入,因此使用GNUdiff
命令使用comm-3--output delimiter='(逐行比较文件):
输出(左列包含来自f1
的行,右列-来自f2
):
-y,--并排
-两列输出感谢awk的做法。我对它很陌生。你能告诉我什么是si NR和FNR吗?这两种方法都很有效。正是我想要的。非常感谢。
$ grep -Fxf f1 f2 | grep -hxvFf- f1 f2
3
8
diff --suppress-common-lines -y f1 f2 | column -t
3 | 8