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 ループ内で処理しようとすると、1 行が 2 行として読み取られます...

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

両方の数値を 1 行に表示するには、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 に答える