2

我对使用 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 个不同的列中。谢谢你的帮助!

4

2 回答 2

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告诉 join 对于第二个文件,它也应该使用第一个字段(在某些实现中,您可以缩短为单个-N 1,因此它对两个文件都使用第一个字段)。

连接字段的使用方式如下:当连接在第一个文件中找到与第二个文件中的行具有相同连接字段的行时,输出包含合并的行。请注意,命令行中文件的顺序对于最终输出中的字段顺序很重要。

希望这会有所帮助=)

于 2012-10-11T15:29:04.253 回答
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
于 2014-02-28T21:06:31.967 回答