0

私はしばらくこれに取り組んできましたが、解決策にたどり着くことができませんでした。どんな助けでも大歓迎です。UNIX ワークステーションで作業しており、30 ~ 40 MB のテキスト ファイルを使用しています。私の実際のファイルには、何百ものジョブがあります。入力ファイルの例;

# misc logging data
Job 1 start  
Task  start  
Task  stop  
Task  start  
Task  stop  
Job 1 stop  
# Other misc logging data  
Job 2 start  
Task  start  
Task  stop  
Job 2 stop  
# Other misc logging data  
Job 3 start  
Task  start  
Task  stop  
Task  start  
Task  stop  
Task  start  
Task  stop  
Job 3 stop  

私の望ましい出力は次のとおりです。

Job 1, 2 Tasks  
Job 2, 1 Tasks  
Job 3, 3 Tasks   

再度、感謝します...

4

1 に答える 1

0
awk '/^Job .* start$/ { jobname = $2; taskcount = 0; }
     /^Task start/    { taskcount++; }
     /^Job .* stop$/  { printf "Job %s, %d Tasks\n", jobname, taskcount; }'

これは多くのチェックを行いません (ジョブの終了が開始されたジョブであることを確認する、開始された各タスクが停止したことを確認するなど) が、提供されたデータを処理し、必要な出力を提供します。

「その他のその他のロギング データ」行に、特定のジョブとそのタスクと混同された内容が含まれている可能性がある場合 (タスクの開始行などと一致する可能性がある)、もう少し賢くする必要があります。

于 2013-08-14T01:06:27.510 に答える