sed将文件中的文本附加到行上

时间:2016-05-04 13:55:09

标签: linux bash awk sed

我有一些bash以KB为单位计算系统总内存的90%并将其输出到文件中:

cat /proc/meminfo | grep MemTotal | cut -d: -f2 | awk '{SUM += $1} END { printf "%d", SUM/100*90}' | awk '{print $1}' > mem.txt

然后我想将值复制到另一个文件(/tmp/limits.conf)并追加到一行。

下面搜索字符串“soft memlock”并将之前创建的mem.txt的输出写入/tmp/limistest.conf

sed -i '/soft\smemlock/r mem.txt' /tmp/limitstest.conf

但是脚本输出如下:

oracle   soft memlock
1695949

我希望它输出如下:

oracle   soft memlock 1695949

我已经尝试过很多东西,但无法正确输出。

由于

编辑这里是输入文件/ proc / meminfo中的一些文字

MemTotal:          18884388 kB
MemFree:            1601952 kB
MemAvailable:       1607620 kB

2 个答案:

答案 0 :(得分:1)

我认为您的方法过于复杂:无需将输出存储在文件中,然后将其附加到另一个文件中。

如果您只是将值存储在变量中,然后将其添加到文件中,该怎么办?

var=$(command)
sed "/soft memlock/s/.*/& $var/" /tmp/limitstest.conf

一旦您对输出有信心,请在sed操作中添加-i

事实上,command可以是awk单独处理的东西:

awk '/MemTotal/ {sum+=$2} END { printf "%d", SUM/100*90}' /proc/meminfo

查看sed部分的测试:

$ cat a
hello
oracle soft memlock
bye
$ var=2222
$ sed "/soft memlock/s/.*/& $var/" a
hello
oracle soft memlock 2222
bye

答案 1 :(得分:1)

这是一个猜测,因为你没有提供样本输入/输出,但你需要的只是:

awk '
NR==FNR {
    if (/MemTotal/) {
        split($0,f,/:/)
        $0 = f[2]
        sum += $1
    }
    next
}
/soft[[:space:]]+memlock/ { $0 = $0 OFS int(sum/100*90) }
{ print }
' /proc/meminfo /tmp/limitstest.conf > tmp &&
mv tmp /tmp/limitstest.conf