很抱歉,如果这是一个简单的shell编程问题,但我找不到一种方法来完全按照我想要的方式。
我有2个日志。
log1
Cust Subsys StartDate EndDate col1 col2 col3
1001 10000 20150501 20150731 6.1700 0.0000 0.0000 -- this line is identical in both logs
1001 12000 20150401 20150630 0.0000 0.0000 0.0000 -- this line is missing from log2
1003 13000 20150310 20150630 2.4800 0.0000 0.0000 -- the value in log1.col1 is different from the one in log2.col1
log2
Cust Subsys StartDate EndDate col1 col2 col3
1001 10000 20150501 20150731 6.1700 0.0000 0.0000 -- this line is identical in both logs
1003 13000 20150310 20150630 9.1800 0.0000 0.0000 -- the value in log1.col1 is different from the one in log2.col1
7000 7777 20150406 20150413 4.3300 0.0000 0.0000 -- this line is missing from log1
我想从这些日志中生成3个报告:
在log1
但未在log2
在log2
但未在log1
在log1
和log2
的前4列中相同但在列上具有不同值的行:col1
,col2
或{{1} }。
我在所有列上对两个日志进行了排序:
col3
然后我尝试使用comm生成前两个报告:
cat log1 |sort -n -k1,1 -k2,2r -k3,3 -k4,4 -k5,5 -k6,6 -k7,7 > log1.sorted
cat log2 |sort -n -k1,1 -k2,2r -k3,3 -k4,4 -k5,5 -k6,6 -k7,7 > log2.sorted
我注意到comm -13 log1.sorted log2.sorted > unique2.log
comm -23 log1.sorted log2.sorted > unique1.log
和unique1.log
中可以找到log1
中的行。 (我的日志每行有超过20,000行)log2
是否不用于提取不在其中一个日志中的行?仅当行号相同时它才有效吗? (comm
中的行是unique1.log
中的188
和log1
中的207
如何为第3次报告提取数据,我只想在log2
col1
或col2
中显示具有不同值的行?
谢谢
答案 0 :(得分:0)
尝试以那种方式使用
comm -23 sort_file1 sort_file2 unique_in_file1
comm -13 sort_file1 sort_file2 unique_in_file2
comm -12 sort_file1 sort_file2 common_entries
如果这不起作用,请尝试查看diff命令。