【发布时间】:2014-01-18 12:49:04
【问题描述】:
PFB 代码:
for i in 3 4 5 6 7;
do
echo "try $i";
cat vm.txt | cut -f6 -d" " | awk '{ if (NR==$i) print $0 }';
sleep 1;
done;
文件 vm.txt 包含:
kthr memory page disk faults cpu
r b w swap free re mf pi po fr de sr s0 s1 s2 s3 in sy cs us sy id
1 0 0 108257664 49651668 401 2616 445 0 0 0 1 3 -0 6 6 1436 13883 1427 1 47 52
0 0 0 100580908 40823736 1533 4406 4075 1 1 0 0 0 0 0 0 3190 99090 2767 10 2 88
1 0 0 100580720 40771708 917 5865 0 0 0 0 0 0 0 0 0 3747 137273 3557 13 2 85
1 0 0 100580168 40721008 401 1725 0 0 0 0 0 0 0 0 0 3220 109486 2761 11 2 87
1 0 0 100581152 40703900 199 2494 0 0 0 0 0 0 0 0 0 3727 91301 2932 9 2 89
1 0 0 100581636 40710604 0 0 0 0 0 0 0 0 0 0 0 2472 59069 2136 8 1 91
1 0 0 100581644 40730952 45 501 0 0 0 0 0 0 0 0 0 2939 87167 2540 9 1 90
2 0 0 100581632 40712628 46 502 0 0 0 0 0 0 0 0 0 3251 88502 2763 9 1 90
1 0 0 100581628 40757704 185 219 0 0 0 0 0 0 0 0 0 3058 81429 2590 9 1 90
1 0 0 100581628 40747620 3602 52322 0 0 0 0 0 0 0 0 0 7353 127233 6077 10 5 85
现在当我运行这个命令时:
cat vm.txt | cut -f6 -d" " | awk '{ if (NR==3) print $0 }';
它可以工作,但在 for 循环中不起作用。我不知道问题是什么。非常感谢您的帮助。
【问题讨论】:
-
请注意
;字符。在你的命令结束时是多余的;通常,您只需要在命令之间使用;即可将 multiple 放在 same 行上。 -
一个与问题无关的建议。具有连续输入数字的 for 循环可以更新为 :
for i in {3..7}; do echo $i; done,因此您无需一一键入数字列表,例如如果超过 100 :)。其次,你的代码一点都不好,需要多次阅读源文件。您应该参考@Ed Morton 的 awk 脚本,该脚本只读取一次。
标签: bash if-statement for-loop awk