写两列

时间:2016-04-07 15:35:31

标签: bash shell logging multiple-columns

我正在尝试记录一些数据,第一个是cpu核心和内存的数量。如何将CPU写入第一列,将内存写入第二列?

#!/bin/bash

    while true;
            do nproc >> system.log & free -m | grep Mem: | awk '{print $2}' >> system.log
            sleep 5
    done

SYSTEM.LOG:

1246
1
1246
1
1246
1
1246
1
1246
1
1246
1
1246
1
1246

我希望它看起来像这样:

1246   1
1246   1
1246   1
1246   1
1246   1
1246   1
1246   1
1246   1

4 个答案:

答案 0 :(得分:0)

这将是最简单的

$ pr -2ats' ' file

1246 1
1246 1
1246 1
1246 1
1246 1
1246 1
1246 1
1246

或类似地

$ paste -d' ' - - <file

1246 1
1246 1
1246 1
1246 1
1246 1
1246 1
1246 1
1246

和强制性awk解决方案

$ awk 'ORS=NR%2?FS:RS' file

1246 1
1246 1
1246 1
1246 1
1246 1
1246 1
1246 1
1246

与您的脚本结合

... grep Mem: | awk '{ORS=NR%2?FS:RS; print $2}'

答案 1 :(得分:0)

你可以这样做:

#!/bin/sh

while true;
do
    echo "`nproc`  `free -m | grep Mem: | awk '{print $2}'`" >> system.log
    sleep 5
done

答案 2 :(得分:0)

使用GNU bash:

printf "%s %s\n" $(< file)

答案 3 :(得分:0)

尝试一下:

#!/bin/bash --
while true; do
        printf "%s %s\n" $(nproc) "$(free -m | grep Mem: | awk '{print $2}')" >> system.log
        sleep 5
done

测试:

$ chmod +x log_monitor.sh
$ ./log_monitor.sh
^C

$ cat system.log
8 16082
8 16082
8 16082
8 16082
8 16082