第11回 Forループ

呪文

  • まずは、#include で準備。。
  • 箱をつかうときは,intで宣言する、箱の準備する。
  • 箱の中身をprintfするときは,%d(int) %lf(float) あとでi,j

本日

sedの基本
forループ

コンピュータがつかえるとは、

    • コンピュータが使える=Linuxコマンドが使える+プログラミング言語が使える
    • Linuxコマンドが使えるとは…
      • データ整理の例,sedawk コマンドが使えると強い。。


sedは置換コマンド

sed "s/置換される文字列/置換する文字列/g" 入力ファイル


例)

sed "s/id/ちょめちょめ/g mos.txt

sed "s/せ/そ/g" mos.txt

sed "s/せやな/そうですね/g" mos.txt

置換できました。

で、これができてなにがうれしいの?

組み合わせて使うとすごい。

例)
発言数の上位20人のランキングをつくる

grep id: mos.txt | egrep ^[1-9] | sed "s/.*id//g" | sort | uniq -c | sort -k1,1gr | head -20

sedの便利さ


w3m -dumbをつかえば、、任意のスレッドできる。

w3m -dump http://daily.2ch.net/test/read.cgi/newsplus/1410998447/ | grep ID: | egrep ^[1-9] | sed "s/.*ID//g" | sort | uniq -c | sort -k1,1gr | head -20

41 :XNHSBaLb0
29 :2kUo8A0Q0
26 :Hex50I1R0
21 :C6SxJR8Ei
21 :u5/mHqZg0
18 :APnpQBLz0
17 :7aHefTDS0
17 :k0Piz1rM0
16 :7s4G8Qtii
15 :h6zqwMyV0
14 :0hunu4GS0
14 :M49pSyca0
14 :Y4Xv99erO
13 :McM1bTAa0
13 :U2NmTN180
13 :wBfC8oQv0
12 :QI6fWUcO0
11 :VE5CClVa0
11 :xncE2u280
10 :qFDPNu8JO

w3m -dump http://daily.2ch.net/test/read.cgi/newsplus/1410998447/ grep XNHSBaLb0

何を書き込んでる?

w3m -dump http://daily.2ch.net/test/read.cgi/newsplus/1410998447/ | grep -A10 2kUo8A0Q0

URLをとりだす。

grep href subback.html | awk -F"\"" '{print $2}' | sed "s/\/.*//

他の同じ板のスレにはかきこんでるのか?

wget http://daily.2ch.net/newsplus/subback.html

for i in `grep href subback.html | awk -F"\"" '{print $2}' | sed "s/\/.*//g" | egrep ^[0-9]`;do w3m -dump http://daily.2ch.net/test/read.cgi/newsplus/| grep -A10 2kUo8A0Q0 ; sleep 10;done


「おい」の2ちゃんねるスレッドの検索

for i in `grep href subback.html | awk -F"\"" '{print $2}' | sed "s/\/.*//g" | egrep ^[0-9]`;do w3m -dump http://daily.2ch.net/test/read.cgi/newsplus/$i | grep -A10 おい ; sleep 10;done

何分ごとに書き込んでる?

w3m -dump http://daily.2ch.net/test/read.cgi/newsplus/1410998447/ | grep XNHSBaLb0 | sed "s/ID.*//g" | sed "s/.*) //g" | sed "s/:/ /g" | awk '{str=3600*$1+60*$2+$3;print (str-str2)/60;str2=str}'

平均は?

$ w3m -dump http://daily.2ch.net/test/read.cgi/newsplus/1410998447/ | grep XNHSBaLb0 | sed "s/ID.*//g" | sed "s/.*) //g" | sed "s/:/ /g" | awk '{str=3600*$1+60*$2+$3;print (str-str2)/60;str2=str}' | awk 'NR!=1{str=str+$1}END{print str/NR}'

2位の人は?

w3m -dump http://daily.2ch.net/test/read.cgi/newsplus/1410998447/ | grep 2kUo8A0Q0 | sed "s/ID.*//g" | sed "s/.*) //g" | sed "s/:/ /g" | awk '{str=3600*$1+60*$2+$3;print (str-str2)/60;str2=str}' | awk 'NR!=1{str=str+$1}END{print str/NR}'

11.2797

forループ

繰り返しにはwhileループとforループの2種類あります。
前々回には,whileループをやりました。

  • これまでの復習 whileループ
while(条件){
  条件が真のとき実行
}

1から100までの数字を3おきに表示
例:1,3,5,7

  • while文
#include<stdio.h>
int main(){
 int i;
 i=1;
 while(i<=100){
   printf("%d\n",i);
   i=i+3;
 }
}

i=1とか
i=i+3繰り返しに関することがバラバラになっていて,みにくい。


そこで,for文:

#include<stdio.h>
int main(){
int i;
 for(i=1;i<=10;i=i+2){
  printf("%d\n",i);

 }
return i;
}

繰り返しに関することは,前に書いてしまおう。