隔离grep -A中的值

时间:2017-10-10 17:16:46

标签: bash awk grep

感谢您抽出时间回答这些问题。我有一个电话账单,我想通过bash处理。我使用grep,awk和sed来找到我需要的一些值,但我不知道如何找到其余的值。我使用grep在大文件中找到第一行代码,但是如果有更好的方法我可以使用它。这是我的例子。

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

提前感谢您的任何帮助或意见。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

所有人都在这里学习,但是在你给他一个像123这样的解决方案之前,OP必须告诉他的尝试。 所以用sed。

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