如何使用 sed 文本处理

如何使用 sed 文本处理

我需要你关于这个问题的帮助。

我有 3 个临时文件和 nbf.txt。
我想将这 3 个临时文件中每小时的行复制到 nbf.txt:
每个临时文件中都有
每小时的临时文件:
tmp1
Receiveid 交易
========================
2020-05-29 00->12

tmp2
交易失败
====================
2020-05-29 00->1 失败

温度3
每小时打开失败的会话数
===============================
2020-02-29 00->2 个会话

所以我需要对每个临时文件使用 sed:

我在我的脚本中使用以下命令:

sed -i -e '1,$p' nbf.txt -e '1,3d' tmp1
sed -i -e '1,$p' nbf.txt -e '1,3d' tmp2
sed -i -e '1,$p' nbf.txt -e '1,3d' tmp3

nbf.txt 中的结果注意: 我需要以下结果使用sed或者尾巴或者awk

Received Transactions Per Hour
==============================
2020-02-29 00->69646 requests

2020-02-29 23->82666 requests

2361523 Received Transactions


Rejected Transactions Per Hour
===============================

0 Rejected Transactions


Failed Open Sessions Per Hour
==============================
2020-02-29 00->2 sessions
2020-02-29 22->1 sessions

8 Failed Sessions

但无法正常工作

答案1

一般来说,没有必要通过管道连接到cat一个grep甚至awk另一个,awk因为单个管道awk就可以很好地完成所有工作。

$ awk -F'[ :]' '/:/ { datestring=$1; a[$2]++;}; END { for(i=0;i<24;i++) '\
'{ ind=sprintf("%02d",i); '\
'printf "%s %2s->%7d\n",datestring,ind,(a[ind]>0) ? a[ind] : 0 ; }; }' \
Received_transaction.log-$Hour
2020-05-28 00->      0
2020-05-28 01->      0
2020-05-28 02->      0
2020-05-28 03->      0
2020-05-28 04->      0
2020-05-28 05->      0
2020-05-28 06->      0
2020-05-28 07->      0
2020-05-28 08->      0
2020-05-28 09->      0
2020-05-28 10->      0
2020-05-28 11->      0
2020-05-28 12->     13
2020-05-28 13->      0
2020-05-28 14->      0
2020-05-28 15->      0
2020-05-28 16->      0
2020-05-28 17->      0
2020-05-28 18->      0
2020-05-28 19->      0
2020-05-28 20->      0
2020-05-28 21->      0
2020-05-28 22->      0
2020-05-28 23->      0

相关内容