首页 > 解决方案 > 当特定字符串出现在该行上时合并所有行

问题描述

例如,当行首出现某个字符串时,我希望它们合并在一起

我的文本文件中有多次如下内容,然后我想合并从payload_sizes(字节)开始的所有行

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_sizes(bytes) 合并在一行和”packet_datarate(bits/clk) 开头的行合并在一起

Output should look like this
payload_sizes(bytes): 1,2,3,4,5,6....10,100,202,303,405,5,6....10,13,24,35,45,55,65....10
packet_datarate(bits/clk):11,22,33,44,55,.....20,11,22,33,44,55,.....20,11,22,33,44,55,.....20 

标签: bash

解决方案


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 
                          }' filename

一个班轮:

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 }' filename

处理文件的每一行并搜索“packet_datarate”。如果存在,则取第二个 : 分隔字段并去除所有空格 { 和 }。将剩余文本 (str) 添加到变量 packt。对“payload_sizes”执行相同的操作,将数据添加到变量 payl。最后,打印以正确方式格式化的两个变量。


推荐阅读