我正在使用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
我需要迭代才能在一行上显示这两个数字......为什么要这样做?我怎么能绕过它呢?
谢谢!
答案 0 :(得分: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
答案 1 :(得分:0)
在运行循环之前使用IFS=$'\n'
。
答案 2 :(得分:0)
您可以执行以下操作:
tail /root/psfile.tmp.test | while read -r a b ; do
echo "a: $a b: $b"
done
保持代码原样,并将IFS
设置为$'\n'
,以便仅在新行上分割for循环 - 默认情况下,它会在任何空格上分割。