大家好我有两个管道分隔文件,第一个文件包含1000个记录,第二个文件包含10个记录和第二个文件中存在的记录存在第一个文件。现在需要一个文件,通过排除两个文件中出现的10条记录,它将为我提供990条记录,
我知道如何使用SQL。但是我们怎样才能在UNIX中实现这一点?
任何帮助非常感谢
答案 0 :(得分:8)
假设文件为all
和some
。然后做
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