如何将“command -i interval | tail”命令的输出写入文件?

5

我正在使用这个命令:

sar 1 | tail -n +3

以下是输出的内容(每1秒输出一次,我在几秒钟后中断了它):
root@debian:/home/hyper/stats# sar 1 | tail -n +3
20:00:04        CPU     %user     %nice   %system   %iowait    %steal     %idle
20:00:05        all      0,25      0,00      0,50      0,00      0,00     99,25
20:00:06        all      0,50      0,00      0,25      0,00      0,00     99,25
20:00:07        all      4,79      0,00      1,01      0,00      0,00     94,21
20:00:08        all      0,75      0,00      0,75      0,75      0,00     97,74
20:00:09        all      1,26      0,00      0,76      0,00      0,00     97,98
20:00:10        all      0,75      0,00      0,50      0,00      0,00     98,74
^C

问题出现在我尝试将输出写入文件时。 我已经尝试过以下方法:
sar 1 | tail -n +3 > file

但是它创建了一个空文件。问题在于" sar "命令生成了“连续输出”,但我不知道如何处理它。
编辑:为了澄清我的意图:我运行一个命令,比如 "top "(或 "sar 1"等),它每隔 X 秒产生一个输出。每个产生的输出都包含一个头部(几行),我不想要。所以我想运行 "top" 10 秒,并将产生的 10 个输出去掉它们的头部保存到一个文件中。

2
tail 正在等待 sar 完成以便找出最后三行是什么。因为输出从未完成,所以 tail 永远无法执行任何操作。 - Marc B
1
谢谢,现在我理解了这种行为...但是我不知道有什么替代方法来实现我想要的。 - HBv6
1
你想要的并没有明确定义。如何获取永无止境的某个东西的最后3行? - Barmar
2
我运行一个命令,比如“top”(或“sar 1”等),它每隔X秒产生一次输出。每个产生的输出都包含我不想要的标题(几行)。因此,我想运行“top”10秒钟,并将产生的10个输出保存到文件中,而不包括它们的标题。 - HBv6
2个回答

3

sar 1 >> filename

或者

sar 1 | tee -a filename


您可以使用tee -a命令将输出同时输出到控制台(STDOUT)和追加到文件中。

您可以使用>>来追加到文件而不覆盖它。


2

不必使用tail命令,你可以使用一个shell命令列表来剥离前几行:

sar 1 | { read; read; cat; } > file.txt

我不确定为什么 tail 命令无法工作;我曾认为你只是缺少了 -f 选项,但这也似乎没有产生任何输出。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接