在awk中使用换行的问题

时间:2014-11-26 15:21:25

标签: memory awk newline

我正在尝试在我的Linux(Centos)框中使用以下列在csv中获取输出:

"timestamp" "date" "process name" "process id" "%memory"

以下是我的代码:

tdydate=$(date +'%m-%d-%Y %H:%M:%S')
ip=$(ip route get 8.8.8.8 | awk 'NR==1 {print $NF}')

echo $tdydate "," $ip "," $(top -b -n 1 | awk 'BEGIN {RS = "\n"} NR>7 {print $12,$1,$10}') > procinfo.csv

但是,正如预期的那样,它不会在换行符中打印信息。然而,当我在下面做它时,它工作得非常好,并以所需的格式打印所有必需的信息: -

top -b -n 1 | awk 'BEGIN {RS = "\n"} NR>7 {print $12,$1,$10}' > procinfo.csv

当我尝试使用echo打印时间戳和ip时,格式变为单行。有人可以在我错的地方纠正我吗?

所需的输出应采用以下格式: -

第一列是时间戳,第二列是ip,第三列是进程名称,第四列是进程ID,第五列是%内存。它应该是逗号分隔值(csv作为输出)。

1 个答案:

答案 0 :(得分:0)

你的echo语句应该是这样的:

echo "$tdydate , $ip , $(top -b -n 1 | awk 'NR>7 {print $12,$1,$10}')" > procinfo.csv

除了用双引号将整个事物包装起来以保留空格之外,我还删除了RS的赋值。我不认为这是必要的,因为默认值是您平台上的换行符。