0

我正在创建一个带有 ps 命令输出的文件,如下所示。

ps aux | grep ^apache | grep sbin/[h]ttpd | awk '{print $2" "$6}' > /root/psfile.tmp

当您查看文件时,它的内容如下。

[root@testserver ~]# tail /root/psfile.tmp
16795 3184
16796 3148
16797 3148
16799 3148
16800 3148
16801 3148
16802 3148
16803 3148 
16804 3148
16805 3148

但是,当我尝试在 for 循环中处理它时,它会将一行读为两行......例如......

for x in $(tail /root/psfile.tmp.test);do echo $x;done
16795
3184
16796
3148
16797
3148
16799
3148
16800
3148
16801
3148
16802
3148
16803
3148
16804
3148
16805
3148

我需要 for 迭代以在一行上显示两个数字...为什么要这样做,我该如何解决?

谢谢!

4

3 回答 3

4
while read one two
do
    echo "one: $one"
    echo "two: $two"
done < psfile.tmp.test

或者

while read line
do
    echo "line: $line"
done < psfile.tmp.test
于 2012-08-25T16:39:42.977 回答
0

IFS=$'\n'在运行循环之前使用。

于 2012-08-25T16:37:45.947 回答
0

您可以执行以下操作:

tail /root/psfile.tmp.test | while read -r a b ; do
  echo "a: $a b: $b"
done

保持您的代码原样并设置IFS$'\n'使 for 循环仅在换行符上拆分 - 默认情况下,它会在任何空白处拆分。

于 2012-08-25T16:38:42.807 回答