在 linux/shell 环境中工作,我怎样才能完成以下任务:
文本文件 1 包含:
1
2
3
4
5
文本文件 2 包含:
6
7
1
2
3
4
我需要提取文件 2 中不在文件 1 中的条目。所以在这个例子中是“6”和“7”,现在是它找到它们的地方。
比如文件1中的6、7
我已经在使用这个 awk 命令了
awk 'FNR==NR{a[$0]++;next}!a[$0]' file1 file2
但是这个命令只能显示差异,所以,6 和 7 而不是它找到的地方。
如何从命令行执行此操作?
非常感谢!
使用 awk 你可以这样做:
awk 'FNR==NR { seen[$0]=FILENAME; next }
{if ($1 in seen) delete seen[$1]; else print $1, FILENAME}
END { for (i in seen) print i, seen[i] }' file{1,2}
6 file2
7 file2
5 file1
在遍历 file1
时,我们将每行的 column1 存储在数组 seen
中,值为 FILENAME
。接下来在迭代 file2
时,我们打印每个缺失的条目,如果找到条目(公共(public)条目)则删除。最后,在 END
block 中,我们打印数组 seen
中的所有剩余条目。