比较文件

时间:2009-07-09 21:20:38

标签: unix

大家好我有两个管道分隔文件,第一个文件包含1000个记录,第二个文件包含10个记录和第二个文件中存在的记录存在第一个文件。现在需要一个文件,通过排除两个文件中出现的10条记录,它将为我提供990条记录,

我知道如何使用SQL。但是我们怎样才能在UNIX中实现这一点?

任何帮助非常感谢

5 个答案:

答案 0 :(得分:8)

假设文件为allsome。然后做

 fgrep -v -f some all

答案 1 :(得分:1)

请参阅join命令

答案 2 :(得分:0)

首先,用换行符替换管道,以便我们可以使用面向行的Unix工具处理文件。然后使用comm过滤掉两个文件中出现的行。最后,将换行符转换回管道。

tr '|' '\n' < file1 | sort > file1.sorted
tr '|' '\n' < file2 | sort > file2.sorted
comm -3 file1.sorted file2.sorted | tr '\n' '|'

或者使用流程替换<(command)语法在一行中完成所有操作:

comm -3 <(tr '|' '\n' < file1 | sort) <(tr '|' '\n' < file2 | sort) | tr '\n' '|'

答案 3 :(得分:0)

comm实用程序可用于过滤来自另一个文件的行

答案 4 :(得分:0)

awk 'FNR==NR{ a[$0++;next}(!($0 in a))' some all