2016-06-22 11 views
1

私は次の2つのログファイル、すなわちLog_1.log Log_2.logを持っています。結果セットをUnixの2つのセクションに分割する方法は?

Log_1.log: 
Apr 10 02:07:20 Data 1 
May 10 04:11:09 Data 2 
June 11 06:22:35 Data 3 
Aug 12 09:08:07 Data 4 

Log_2.log 
Apr 10 09:07:20 Data 1 
Apr 10 10:07:10 Data 2 
Jul 11 11:07:30 Data 3 
Aug 18 12:50:40 Data 4 

次のコードを使用して、開始時刻と終了時刻の間のデータを抽出しています。私は以下の形式で出力を取得するため

sort -t' ' -k1,1M -k2,3n log_1.log log_2.log | sed -n '/Apr 10 02:07:20/,/Jul 11 11:07:30/p' 

と私の出力が

Apr 10 02:07:20 Data 1 
Apr 10 09:07:20 Data 1 
Apr 10 10:07:10 Data 2 
May 10 04:11:09 Data 2 
June 11 06:22:35 Data 3 
Jul 11 11:07:30 Data 3 

であるが、それは可能ですか?

Log_1.log 
Apr 10 02:07:20 Data 1 
May 10 04:11:09 Data 2 
June 11 06:22:35 Data 3 
Log_2.log: 
Apr 10 09:07:20 Data 1 
Apr 10 10:07:10 Data 2 
Jul 11 11:07:30 Data 3 

助けてください。ありがとうございました

答えて

2

コマンドに両方のファイルを同時に入力するのではなく、ファイルごとにコマンドを1回実行してください。

for file in log_1.log log_2.log; do 
    echo "$file:" 
    sort -t' ' -k1,1M -k2,3n $file | sed -n '/Apr 10 02:07:20/,/Jul 11 11:07:30/p' 
done 
+0

お返事ありがとうございます。入力した日付がログファイルに存在する場合、コードは正常に機能します。 ''/Jan 01 10:00:00 /、/ Jun 1 12:00:/ p''のような日付を入力すると、そのような日付はログファイルにはないので、結果はnullになります。入力された開始時刻がログファイルに存在しない場合は、次の最も近い日付から開始するソリューションはありますか?終了日は同じです。 – Vishwaroopa

+0

これらのツールは単なるテキスト処理ツールです。このようなロジックが必要になったら、より洗練されたスクリプトを書く必要があります。特に月の名前はアルファベット順に比較できないため、最初に変換する必要があります。 – raimue

+0

たとえば、次の質問を参照してください。[Q1](https://unix.stackexchange.com/questions/120831/grep-for-range-of-numbers)[Q2](https://stackoverflow.com/questions/7575267 /指定された範囲のログファイルからの抽出データ) – raimue

関連する問題