当特定字符串出现时,每次出现时打印它们
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.
当特定字符串出现时每次出现时打印它们。
例如,如果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.