首页 > 解决方案 > 当特定字符串出现时打印它们每次出现

问题描述

当出现特定字符串时,每次出现时都会打印它们。

例如,如果input_file.txt如下文本

PerformanceINFO
            UVM_INFO_PERF ****NIB-FIB Axis Interface Per-packet Performance Report****
             interface_name            : NIB-FIB,
             payload_sizes (bytes)     : {1,2,3,4,5,6....10, }
             packet_datarate (bits/clk): {11,22,33,44,55,.....20, }


interface_name            : NIB-FIB,
                 payload_sizes (bytes)     : {100,202,303,405,5,6....10, }
                 packet_datarate (bits/clk): {11,22,33,44,55,.....20, }

interface_name            : NIB-FIB,
                 payload_sizes (bytes)     : {13,24,35,45,55,65....10, }
                 packet_datarate (bits/clk): {11,22,33,44,55,.....20, }

所以我期望的是每次“payload_size(byte)”和“packet_datarate(bits/CLK)出现在我input_file.txt的如下图所示时,我想打印输出如下

Output_file.txt

payload_sizes (bytes)     : 1,2,3,4,5,6....10
packet_datarate (bits/clk):11,22,33,44,55,.....20

payload_sizes (bytes)     : 100,202,303,405,5,6....10
packet_datarate (bits/clk): 11,22,33,44,55,.....20

payload_sizes (bytes)     : 13,24,35,45,55,65....10
packet_datarate (bits/clk): 11,22,33,44,55,.....20

到目前为止我所做的是合并所有这些,但我希望它们在它们出现时被打印出来

awk -F: '/packet_datarate/ { packt=packt""gensub(/[ {}]/,"","g",$2) } /payload_sizes/ { payl=payl""gensub(/[ {}]/,"","g",$2) } END { print "payload_sizes(bytes):,"payl;print "packet_datarate(bits/clk):,"packt }' input_file.txt >> output_file.txt

标签: bashgit-bash

解决方案


试试这个管道,它有效

grep 'payload_sizes\|packet_datarate' input_file.txt | sed "s/{\|}//g"

sed 部分是删除 } 和 {


推荐阅读