Memory 在awk中使用换行符的问题

Memory 在awk中使用换行符的问题,memory,awk,newline,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 {

我试图在我的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作为输出)。

您的echo语句应该是:

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

除了用双引号将整个内容括起来以保留空白外,我还删除了对
RS
的赋值。我不认为这是必要的,因为默认值是平台上的换行符。

将整个字符串引用到
echo
。如果你让变量不带引号,那么shell会吃空格。嗨,这不起作用。您的意思是:-echo“$tdydate”、“$ip”、“$(top-b-n1 | awk'BEGIN{RS=“\n”}NR>7{print$12,$1,$10}”)”>procinfo.csvd top/awk输出是否创建多行?那么你不能用一个
echo
。相反,在
awk
print
awk-v date=“$tdydate”-v ip=“$ip””…{print date”,“ip”,“$12,$1,$10}”中粘贴前两个静态字段。
我不明白这里出了什么问题。所需的输出根本不清楚。我只能看到一行,没有逗号分隔任何数据。请编辑您的问题,显示您所需输出的确切示例。嗨,不幸的是,这不起作用。它以CSV形式给出了以下输出:-11/26/2014 20:29 192.168.0.38 top 1681105 0.0 init 1 0.0 kthread 2 0.0 migration/0 3 0.0 ksoftirqd/0 4 0.0 migration/0 5 0.0 watchdog/0 6 0.0 migration/1 7 0.0 migration/1 8 0.0从您的评论中不清楚输出的格式,您的问题也不清楚所需的输出格式是什么。请编辑您的问题,以显示您希望输出的外观。谢谢Tom,我已将所需的输出格式添加到我的问题中。请告知。。谢谢