使用打印不需要的newline进行bash脚本



我正在为课堂作业写一个bash脚本,我会从尴尬中得到一些非常奇怪的行为。似乎正在为单个 n字符编写两个新线。这是所讨论的代码的一部分:

iterate () {
    for (( i=0; i<$2; i++ )); do
        echo -n $(date +%H:%M:%S) >> cpu_usage.plot
        echo -n $(date +%H:%M:%S) >> disk_usage.plot
        mpstat | awk 'NR>3 { printf "t"$4"t"$6"t"$13"n" }' >> cpu_usage.plot
        iostat | awk 'NR>6 { printf "t"$3"t"$4"n" }' >> disk_usage.plot
        sleep $1
    done
}

cpu_usage.plot的输出很好,但是disk_usage.plot的输出是错误的。它在每次迭代之间打印一个新线。

执行后cpu_usage.plot的相关行:

17:33:28    0.64    0.02    99.33
17:33:30    0.64    0.02    99.33
17:33:32    0.64    0.02    99.33
17:33:34    0.64    0.02    99.33

和disk_usage.plot:

17:33:28    2.16    50.90
17:33:30    2.16    50.90
17:33:32    2.16    50.90
17:33:34    2.16    50.90

我通常认为这是一个问题,因为它从Iostat或其他东西中获得了额外的新线,但事实并非如此。将第6行更改为:

iostat | awk 'NR>6 { printf "t"$3"t"$4 }' >> disk_usage.plot # removing the "n"

根本不打印任何新线;整个事情都在一行。弄乱有条件的抓取线条倾向于进一步破坏东西,而NR> 6则可以抓住正确的数据。

对我来说,这确实是奇怪的,两个命令几乎是相同的,除了其输入以及它发送输出的位置,但是一个命令正确地做到了。对stackoverflow的搜索产生了这一点,我认为这可能会有所帮助,但它们似乎遇到了不同的问题。我承认我是笨拙的崭新,但我在这里完全不知所措。有人有任何想法吗?

iostat输出一个尾随的空线。我建议:

iostat | awk 'NR>6 && $0 != "" { printf "t"$3"t"$4"n" }' >> disk_usage.plot

iostat | awk 'NR>6 && $0 != "" { print "t"$3"t"$4 }' >> disk_usage.plot

最新更新