2017-10-10 16 views
1

となり、これらの質問にお答えいただきありがとうございます。私はbashで処理したい電話料金を持っています。私は必要な値のいくつかを見つけるためにgrep、awk、sedを使いましたが、残りの部分を見つける方法がわかりません。私は大きなファイルでこの最初のコード行を見つけるためにgrepを使用していますが、もっと良い方法があればそれを公開しています。ここに私の例があります。grep -Aの結果を検出する結果は

garbage 
garbage 
Phone usage details for 777-555-1234 
garbage 
garbage 
garbage 
Total Long Distance 124.82 
garbage 
garbage 
Total International 23456.01 
garbage 
garbage 
Phone usage details for 777-444-0987 

次の数字の前に合計を集計して追加する必要がありますが、その部分を把握することができます。次のような結果を得ることができたら、私は満足しています。

Phone usage details for 777-555-1234 
Total Long Distance 124.82 
Total International 23456.01 

ご協力いただきありがとうございます。

+1

何を今まで持っていますか? – 123

+0

正しい答えは、あなたが単語「garbage」を繰り返し使用することによって表現されたテキストの可能な値に完全に依存するので、YMMVはどんな答えでも得ます。もしあなたがもっと助けたいなら、本当に代表的なテキストに "ゴミ"を置き換えてください。 –

答えて

0

次のawkは同じことに役立ちます。

awk ' 
/Phone usage details for/ && flag{ 
    printf("%s%s%.2f%s%.2f\n",val,"\nTotal Long Distance ",sum_long,"\nTotal International ",sum_inter); 
    sum_long=sum_inter="" 
} 
/Phone usage details for/{ 
    val=$0; 
    flag=1; 
    next 
} 
flag && /Total Long Distance/{ 
    sum_long+=$NF; 
    next 
} 
flag && /Total International/{ 
    sum_inter+=$NF 
} 
' Input_file 

出力は以下の通りです。

Phone usage details for 777-555-1234 
Total Long Distance 124.82 
Total International 23456.01 
0

すべてが学ぶためにここにあるが、OPはあなたがSEDでそう123 で彼に言うようなソリューションを与える前に、彼がしようとするもの伝える必要があります。

sed -n '/Phone/{h;:A;n;/Total/!bA;H;:B;n;/Total/!bB;H;x;p}' infile 
+0

これはこれまでのところ最良です。それはpdfファイルなので、私は使用する必要があります less infile | sed 合計が2つ以上ある場合はどうなりますか?いずれのセクションでも、最大5つの合計が存在する可能性があります。私は入力を感謝します。 –

+0

私は以下を使用しなければならない理由を理解していません。 'sed -n '/ Phone/{$ p; h;:A; $ {x; p}; n; /電話/ {x; p; x; h; bA}; /合計/!bA; H; bA} 'infile' –

関連する問題