0

単純なシェル プログラミングの質問であれば申し訳ありませんが、私がやりたいことを正確に行う方法が見つかりませんでした。

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. log1との最初の 4 列が同一であるが、log2列 : col1col2またはの値が異なる行col3

すべての列で両方のログを並べ替えました。

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 行以上あります)ログの 1 つにない行を抽出するために使用されませんか? 行番号が同じ場合にのみ機能しますか? ( で見つかった行は、 inとin の番号です)log1log2communique1.log188log1207log2

またはに異なる値を持つ行のみを表示したい 3 番目のレポートのデータを抽出するにはどうすればよいですcol1 col2col3?

ありがとうございました

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 に答える