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

When specific string appears print them every time they appear

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

例如,如果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",) } /payload_sizes/ { payl=payl""gensub(/[ {}]/,"","g",) } END { print "payload_sizes(bytes):,"payl;print "packet_datarate(bits/clk):,"packt }' input_file.txt >> output_file.txt

试试这个管道,它有效

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

sed 部分是删除 } 和 {

 awk '/payload_sizes \(bytes\)/ { str=gensub(/(^[[:space:]]+)|[{}]/,"","g",[=10=]);print substr(str,1,length(str)-2) } /packet_datarate \(bits\/clk\):/ { str=gensub(/(^[[:space:]]+)|[{}]/,"","g",[=10=]);printf "%s\n\n",substr(str,1,length(str)-2) }' input_file.txt

使用 awk(在本例中为 GNU awk)如果遇到“bytes”行,删除前导空格和 {} 并打印。如果遇到“bits/clk”行,去除前导空格并打印带有额外回车的行 return.