linux - 向每列添加多个值

标签 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 个不同的列中。 感谢您的帮助!

最佳答案

最简单的解决方案是使用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,因此它对两个文件都使用第一个字段)。

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

希望这有帮助 =)

关于linux - 向每列添加多个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12843149/

相关文章:

bash - 使用 bash 将行拆分为训练集和验证集

linux - 比较二进制文件以导出文本文件并查找自上次导出后哪些二进制文件已更改或下一个

python - 如何在特定的 git commit 上运行 shell 脚本?

c++ - TCPSocket.h :35: error: expected ',' or '...' before numeric constant

linux - 更新包后 Remmina 图标丢失

c - write() to serial port 在调用两次时失败

linux - 将具有特定扩展名的文件符号链接(symbolic link)到 linux 中的另一个文件夹

c++ - NTP 对于分布式时间同步有多好?

linux - 将文本输出存储在变量中 (bash)

linux - tar 创建一个空文件夹,我该如何摆脱它?