我正在创建一个带有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迭代在一行上显示两个数字。。。它为什么要这样做,我该如何避开它?
谢谢!
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
在运行循环之前使用IFS=$'n'
。
您可以执行以下操作:
tail /root/psfile.tmp.test | while read -r a b ; do
echo "a: $a b: $b"
done
保持代码原样,并将IFS
设置为$'n'
,以使for循环仅在新行上进行拆分——默认情况下,它在任何空白处进行拆分。