我是shell脚本的新手。我写了下面的脚本来保存“top”命令的输出到文件中:cpu.csv和mem.csv。但文件没有创建。我下面的脚本中的任何错误:
#!/bin/bash
TIMESTAMP=$(date +"%Y-%m-%d-%H:%M:%S")
top -b -n 1 &
CPU_LINE=$(grep "Cpu(s)")
MEM_LINE=$(grep "KiB Mem")
echo "$TIMESTAMP,$CPU_LINE" >> cpu.csv
echo "$TIMESTAMP,$MEM_LINE" >> mem.csv
我希望看到'top'命令的“CPU(s)”行被保存到cpu.csv文件中,并在前面显示时间戳。
2条答案
按热度按时间zhte4eai1#
一种方法是使用awk在一次传递中提取您想要的两个项,并以已知的顺序发出它们-就像这样:
.虽然在您的特定情况下,您根本不需要将数据读入shell变量,并且可以让awk直接写入输出文件;如果你使用的是 GNU awk,它也可以在内部完成
date
的工作:请注意,上面的第一个示例(使用
<( ... )
语法的示例)要求您的脚本使用 bash 运行,而不是sh。(此外,使用小写变量名是有意的:全大写名称用于反映或修改shell行为的变量,而POSIX标准保留至少有一个小写字符的名称用于应用程序定义的使用;参见相关标准https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap08.html)mfuanj7w2#
您的grep命令不完整。您将需要对某些内容应用模式,通常是文件或标准输入。
您可以通过管道
|
将一个命令的标准输出连接到另一个命令的标准输入。举例来说:
这将创建CPU_LINE变量,其中包含您所期望的数据,然后输出到您的文件。