为每列添加多个值

时间:2012-10-11 15:25:40

标签: linux bash shell unix aix

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

2 个答案:

答案 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