【发布时间】:2020-10-29 14:30:21
【问题描述】:
文件1:
cat
dog
house
tree
文件2:
dog
cat
tree
我只需要打印:
house
【问题讨论】:
-
diff FILE1 FILE2
标签: linux
文件1:
cat
dog
house
tree
文件2:
dog
cat
tree
我只需要打印:
house
【问题讨论】:
diff FILE1 FILE2
标签: linux
$ cat file1
cat
dog
house
tree
$ cat file2
dog
cat
tree
$ grep -vF -f file2 file1
house
-v 标志仅显示不匹配,-f 用于文件名用作过滤器,-F 用于完全匹配(不会因任何模式匹配而减慢速度)。
【讨论】:
使用 awk
awk 'FNR==NR{arr[$0]=1; next} !($0 in arr)' FILE2 FILE1
首先使用 FILE2 中的单词构建一个关联数组,然后遍历 FILE1 并仅打印这些。
使用comm
comm -2 -3 <(sort FILE1) <(sort FILE2)
-2 抑制 FILE2 独有的行,-3 抑制两者中的行。
【讨论】:
如果你只想要单词,你可以对文件进行排序,区分它们,然后使用sed 过滤掉 diff 的符号:
diff <(sort file1) <(sort file2) | sed -n '/^</s/^< //p'
【讨论】:
这里是一个选项:
awk 'NR==FNR { arr[$1]="1" } NR != FNR { if (arr[$1] == "") { print $0 } } ' file2 file1
创建一个名为 arr 的数组,使用 file2 的内容作为索引。然后使用 file1,查看每个条目并检查数组 arr 中是否存在条目。如果没有,请打印。
【讨论】: