-1

私はスクリプトを持っています

index=0
while read line 
do  
  echo "read line is $line" 
  line=`echo ${line}|awk '{print $1}'`  

  index=$((index+1)) 

  if((index%2==0));then 
    echo "before continue line is $line"  
    continue 
  fi   

  echo "index is $index and now modify html page with $line" 
  ...
  ...
  done< infile

infile の内容は次のとおりです。

1OrMcP2CdV4 180 

1Wp33RG2XaA 180 

21zUUJ04ovI 180 

2pIqUhaDMLg 180 

2WRU4NUJSVc 180 
...
...

infile には、自分で意図的に追加した別の null 行があります。これを行った理由はhttp://goo.gl/K7g0mを参照してください。これは、「while read」ループの別の奇妙な動作です。基本的に「read」は偶数行を正しく読めないので、偶数行を空行にしています。

スクリプトを実行すると、出力は次のようになります。

read line is 1OrMcP2CdV4 180
index is 1 and now modify html page with 1OrMcP2CdV4


read line is 1Wp33RG2XaA 180
before continue line is 1Wp33RG2XaA


read line is 
index is 3 and now modify html page with 


read line is 21zUUJ04ovI 180
before continue line is 21zUUJ04ovI

read line is 
index is 5 and now modify html page with 

したがって、基本的に、「while read loop」は次の順序で行を読み取るようです: 1 3 2 5 4

次に、ヌル行を次のように変更しました

1OrMcP2CdV4 180 
Axxx
1Wp33RG2XaA 180 
Axxx
21zUUJ04ovI 180 
Axxx 
2pIqUhaDMLg 180 
Axxx  
2WRU4NUJSVc 180 
...
..

出力は興味深いです:

read line is 1OrMcP2CdV4 180
index is 1 and now modify html page with 1OrMcP2CdV4

read line is xxx
before continue line is xxx


read line is 1Wp33RG2XaA 180
index is 3 and now modify html page with 1Wp33RG2XaA

read line is xxx
before continue line is xxx

read line is 21zUUJ04ovI
index is 5 and now modify html page with 21zUUJ04ovI 


read line is 21zUUJ04ovI 180
before continue line is 21zUUJ04ovI

OK、今は順番に読んでいますが、偶数行の「Axxx」は「xxx」と読み、最初の 20 行は順番どおりに見えますが、時々順番が乱れます!! 面白くて奇妙ですね。

この不正行為の何が問題になっていますか?スクリプトには、次のようないくつかのバックグラウンド コマンドがあります。

firefox &
tcpdump &

そしてまた好き

sleep 5

詳細については、上記のリンクを参照できますので、サブプロセスの同期の問題がある可能性がありますか? しかし、私はそうは思いません。

この問題は本当に奇妙で、私はそれに対処する方法について本当に途方に暮れています!

4

1 に答える 1

0

では、2 行おきに最初のフィールドを取得したいですか? 次に、次のようなものを提案します。

while read id rest 
do
     # here code to process id
     #  .....
     read again # skip every other line
done

ところで、indexあなたのコードの の初期値は何ですか?

于 2012-11-02T22:52:39.397 に答える