隔离在 grep -A 结果中找到的值



感谢您花时间回答这些问题。 我有一张电话账单,我想通过 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

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

遵循 awk 可能会对您有所帮助。

awk '
/Phone usage details for/ && flag{
  printf("%s%s%.2f%s%.2fn",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

一切都在这里学习,但 OP 必须告诉他他尝试了什么,然后才能给他一个解决方案,比如 123。所以用sed。

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

最新更新