0

抱歉,如果这是一个简单的 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. 在中找到log2但不在其中的行log1

  3. 在 的前 4 列中相同log1但在:或log2列上具有不同值的行。col1col2col3

我对所有列的两个日志进行了排序:

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 生成前 2 个报告:

comm -13  log1.sorted  log2.sorted  > unique2.log
comm -23  log1.sorted  log2.sorted  > unique1.log

我注意到在和unique1.log中可以找到一些行。(我的日志每个都有超过 20.000 行)不用于提取不在其中一个日志中的行吗?是否仅在行号相同时才有效?(找到的行 是数字in和in )log1log2communique1.log188log1207log2

如何提取第三份报告的数据,我只想在col1 col2or中显示具有不同值的行col3

谢谢

4

1 回答 1

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

如果这对您不起作用,请尝试查看 tge diff 命令。

于 2015-04-09T11:00:29.363 回答