从日志中提取差异

时间:2015-04-09 10:29:15

标签: linux extract comm

很抱歉,如果这是一个简单的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个报告:

  1. log1但未在log2

  2. 中找到的行
  3. log2但未在log1

  4. 中找到的行
  5. log1log2的前4列中相同但在列上具有不同值的行:col1col2或{{1} }。

  6. 我在所有列上对两个日志进行了排序:

    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中的188log1中的207

    如何为第3次报告提取数据,我只想在log2 col1col2中显示具有不同值的行?

    谢谢

1 个答案:

答案 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命令。