【发布时间】:2014-11-26 15:21:24
【问题描述】:
我试图在我的 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,第五列是%memory。它应该是逗号分隔值(一个 csv 作为输出)。
【问题讨论】:
-
将整个字符串引用到
echo。如果变量不加引号,那么 shell 会吃掉空格。 -
嗨,这没用。你的意思是:- echo "$tdydate "," $ip "," $(top -b -n 1 | awk 'BEGIN {RS = "\n"} NR>7 {print $12,$1,$10}' )" > procinfo.csv
-
top/awk 输出是否创建多行?那么你不能用一个
echo来做到这一点。而是将前两个静态字段粘贴在awk打印awk -v date="$tdydate" -v ip="$ip" '....{print date","ip","$12,$1,$10}' -
我不明白这里有什么问题。所需的输出根本不清楚。我只能看到一行,没有逗号分隔任何数据。请编辑您的问题,显示您所需输出的确切示例。