1

「---------read-------」で始まり「finish」で終わる行を取り上げたいと思います。以下に示すログファイルから、その間、繰り返される段落を取り除きます(同じ段落の最後の一致のみを保持します)

-------------read-----------  

File reading...  
1 failed  
finish.

[some unrelated messages]

-------------read-----------  
File reading...  
2 failed  
finish.

[some unrelated messages]

-------------read-----------  
File reading...  
1 failed   
finish.  
[some unrelated messages]

ログファイルでは、段落の開始行と終了行は固定されていますが、中間行は固定されてい
sed -n -e "/-------------read-----------/,/finish./ p" $input_file_name ないため、段落を選択するために使用していますが、繰り返しのものを削除できません (一部の段落は重複する可能性があります)。

sed -n "0,/----read---/,/finish/ p"またはを使用してみましsed -n "/----read------/,/finish/,{p;q;}"たが、機能しません。

理想的な出力は次のようになります。

-------------read-----------  
File reading...  
2 failed  
finish.  
-------------read-----------  
File reading...  
1 failed   
finish.

どうやってやるの?誰かが助けてくれたら本当にありがたいです!

4

4 に答える 4

0

同様のロジックを使用して

$ awk '/-+read-+/{k=$0; next} 
            k&&NF{sub(/ *$/,""); k=k RS $0}
         /finish/{if(NR==FNR) a[k]++;
                  else if(!--a[k]) print k; 
                  k=""}' log{,}
-------------read-----------
File reading...
2 failed
finish.
-------------read-----------
File reading...
1 failed
finish.

最後に一致したレコードを保持すると、さらに複雑になります。

于 2015-12-01T20:48:32.337 に答える