<pre><code>$ awk '/vm/ {printf "%s%s", $0, (++i%3?OFS:ORS)}' log.txt
[kfg-ap4] out: vm.overcommit_memory = 0 [kfg-ap4] out: vm.overcommit_ratio = 50 [kfg-ap4] out: vm.nr_overcommit_hugepages = 0
[kfg-ap4] out: vm.overcommit_memory = 0 [kfg-ap4] out: vm.overcommit_ratio = 50 [kfg-ap4] out: vm.nr_overcommit_hugepages = 0
</code></pre>
<p>走查:</p>
<pre><code>/vm/ { # if vm on the record
printf "%s%s", $0, (++i%3?OFS:ORS) # print record and OFS
} # every 3rd time print ORS
</code></pre>
<p>由于实际上一个组中有3行以上的行,请使用以下命令:</p>
<pre><code>$ awk '/vm/ {buf=buf OFS $0; next} buf!="" {print buf; buf=""}'
</code></pre>
<p>它缓冲记录并在遇到与<code>/vm/</code>不匹配的记录后打印出来。如果文件中有连续的组,则可能会出现问题。您可能会得到比预期更长的行。你知道吗</p>
<pre><code>$ cat > process.awk
/vm/ { # if vm string in the record
buf=buf OFS $0 # append the record $0 to the buffer variable buf
next # skip the rest of script for this record, ie.
} # only records without vm match get past this point
buf!="" { # if the buffer is not empty
print buf # print it out
buf="" # empty the buffer
}
$ awk -f process.awk log.txt
</code></pre>