単純なシェル プログラミングの質問であれば申し訳ありませんが、私がやりたいことを正確に行う方法が見つかりませんでした。
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
との最初の 4 列が同一であるが、log2
列 :col1
、col2
またはの値が異なる行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 の番号です)log1
log2
comm
unique1.log
188
log1
207
log2
またはに異なる値を持つ行のみを表示したい 3 番目のレポートのデータを抽出するにはどうすればよいですcol1
col2
かcol3
?
ありがとうございました