第11回 Forループ
呪文
- まずは、#include で準備。。
- 箱をつかうときは,intで宣言する、箱の準備する。
- 箱の中身をprintfするときは,%d(int) %lf(float) あとでi,j
本日
sedの基本
forループ
コンピュータがつかえるとは、
sedは置換コマンド
sed "s/置換される文字列/置換する文字列/g" 入力ファイル
例)
置換できました。
で、これができてなにがうれしいの?
組み合わせて使うとすごい。
例)
発言数の上位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/\/.*//
他の同じ板のスレにはかきこんでるのか?
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; }
繰り返しに関することは,前に書いてしまおう。