【问题标题】:Adding multiple values to each column向每一列添加多个值
【发布时间】:2012-10-02 07:54:28
【问题描述】:

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

【问题讨论】:

    标签: linux bash shell unix aix


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

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

    希望这会有所帮助 =)

    【讨论】:

    • 所以我想把 performance-eval.sh | sed -e 's/^Cur_//;s/=/ /' |排序 > myfile2.txt 在 performance-eval.sh 中加入 myfile2.txt myfile1.txt -1 1 -2 1?我正在尝试为 performance-eval.sh 做 cronjob,所以我不能每次都执行这个文件
    • 对不起。我想我误解了你的帖子。您要做的是处理生成信息的函数的输出(类似于Cur_CPU=10 的行)。我会编辑帖子。
    【解决方案2】:

    这里是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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-15
      • 1970-01-01
      • 2015-01-08
      • 2022-08-11
      • 2021-12-02
      • 2018-12-30
      相关资源
      最近更新 更多