我真的很擅长使用awk / sed
所以,我有一个名为performance.log的文本文件,其中包含以下信息
CPU 1 2 3 4 5 6
RAM 2 3 4 5 6 7
HAR 3 4 5 6 7 8
在performance-eval.sh的代码中,函数生成以下信息
Cur_CPU=10
Cur_RAM=11
Cur_HAR=13
我想将cur_CPU,RAM,HAR插入并保存到performance.log中。 Cur_CPU将转到第一行,第二列 Cur_RAM将转到第二行,第二列 Cur_HAR将转到第三行,第二列
因此得到的performance.log将是
CPU 10 1 2 3 4 5 6
RAM 11 2 3 4 5 6 7
HAR 13 3 4 5 6 7 8
我不确定如何将3个不同的值添加到3个不同的列中。 谢谢你的帮助!
答案 0 :(得分:1)
最简单的解决方案是使用join
命令,但首先需要处理生成附加信息的函数输出:
function | sed -e 's/^Cur_//;s/=/ /' | sort > myfile2.txt
join myfile2.txt myfile1.txt -1 1 -2 1
我们首先从每行的开头删除Cur_
,然后用空格字符替换=
。此外,join要求两个输入都要正确排序。
-1 1
参数告诉join,对于第一个文件,它应该使用第一个字段作为连接字段。类似地,-2 1
告诉连接,对于第二个文件,它也应该使用第一个字段(在某些实现中,您可以缩短为单个-N 1
,因此它使用两个文件的第一个字段)。 / p>
join字段用作如下:当join在第一个文件中找到一条与第二个文件中的行相同的连接字段时,输出包含合并的行。请注意,命令行中文件的顺序对最终输出中字段的顺序很重要。
希望这有助于=)
答案 1 :(得分:0)
以下是awk
:
$ cat output
Cur_CPU=10
Cur_RAM=11
Cur_HAR=13
$ cat perf.log
CPU 1 2 3 4 5 6
RAM 2 3 4 5 6 7
HAR 3 4 5 6 7 8
$ awk 'NR==FNR{split($0, fld, /=|_/);a[fld[2]] = fld[2] FS fld[3];next}
($1 in a){$1 = a[$1]}1' output perf.log
CPU 10 1 2 3 4 5 6
RAM 11 2 3 4 5 6 7
HAR 13 3 4 5 6 7 8