ot2sy39's note

twitter 140文字じゃ書けないときの外部エントリみたいな

読売新聞世論調査結果(6月15〜17日)

調査概要

6月15〜17日に、コンピュータで無作為に作成した固定電話と携帯電話の番号にかける RDD方式で18歳以上の有権者を対象に実施。 固定では有権者在住が判明した891世帯の中から527人、 携帯では応答のあった1201人の中から563人、 計1090人の回答を得た。 回答率は固定59%、携帯47%。小数点以下四捨五入。 グラフや表の数値は、合計が100%にならないことがある。 0は0.5%未満。−は回答なし。

質問と回答

質問1

あなたは、安倍内閣を、支持しますか。

今回 前回
支持する 45 42
支持しない 44 47
その他 3 2
答えない 8 9
質問2

支持する理由(支持しない理由)を、次に読みあげる6つの中から、1つを選んで下さい。(左の数字は「支持する理由」、右は「支持しない理由」※選択式

理由
政策に期待できる(できない) 14 16
首相に指導力がある(ない) 12 4
首相が信頼できる(できない) 5 56
閣僚の顔ぶれがよい(よくない) 2 6
自民党の内閣だから 19 10
これまでの内閣よりよい(これまでの内閣の方がよい) 43 2
その他 3 2
答えない 3 3

##### 質問3 今、どの政党を支持していますか。

今回 前回
自民党 38 37
立憲民主党 6 7
国民民主党 1 2
公明党 3 4
共産党 3 3
日本維新の会 0 2
自由党 - -
希望の党 0 0
社民党 0 0
その他 0 0
支持する政党はない 44 42
答えない 3 3
質問4

自民党総裁選が9月に行われます。次の総裁は、誰がふさわしいと思いますか。※選択式

安倍晋三 26
石破茂 19
岸田文雄 4
野田聖子 5
河野太郎 3
小泉進次郎 28
その他 0
いない 8
答えない 6
質問5

政府が国会に提出している働き方改革関連法案は、収入が高い一部の専門職を、 労働時間の規制から外す「脱時間給制度」や、罰則付きの残業規制の導入などが柱です。 この法案を、今の国会で成立させるべきだと思いますか。

成立させるべきだ 24
そうは思わない 58
答えない 18
質問6

政府が国会に提出している統合型リゾートの実施法案は、 国内でカジノを開設できるようにするものです。 この法案を、今の国会で成立させるべきだと思いますか。

成立させるべきだ 21
そうは思わない 69
答えない 10
質問7

学校法人「森友学園」への国有地売却を巡る問題で、大阪地検特捜部は、 財務省の担当局長だった佐川宣寿氏らを不起訴とする一方、財務省は、 佐川氏が決裁文書の改ざんを実質的に主導したとする調査結果を発表しました。 森友学園を巡る問題は、十分に解明されたと思いますか。

十分に解明された 9
そうは思わない 84
答えない 7
質問8

麻生財務大臣は、森友学園を巡る問題の責任を取って、 辞任するべきだと思いますか。 辞任する必要はないと思いますか。

辞任すべきだ 50
辞任する必要はない 40
答えない 9
質問9

アメリカのトランプ大統領と、北朝鮮金正恩朝鮮労働党委員長は、 史上初めての首脳会談を行いました。 朝鮮半島から核を完全になくすことと、北朝鮮の体制の安全を保証することを確認しましたが、 核を完全になくす時期と具体策は示されませんでした。 この会談を、全体として、評価しますか、評価しませんか。

評価する 43
評価しない 47
答えない 10
質問10

北朝鮮の核やミサイル問題は、解決に向かうと思いますか、思いませんか。

思う 24
思わない 64
答えない 12
質問11

トランプ大統領は、金正恩委員長との首脳会談で、 北朝鮮による日本人の拉致問題を取り上げました。 このことで、拉致問題は、解決に向かうと思いますか。

思う 19
思わない 73
答えない 8
質問12

北朝鮮の核やミサイル問題を解決するため、国際社会は、 北朝鮮との対話をより重視すべきだと思いますか、 経済制裁などの圧力をより重視すべきだと思いますか。

対話重視 48
圧力重視 39
答えない 13
質問13

北朝鮮問題を巡る安倍首相の外交を評価しますか、評価しませんか。

評価する 42
評価しない 47
答えない 11
質問14

日本は、北朝鮮との首脳会談を、なるべく早く行うべきだと思いますか、 それとも、慎重に検討すべきだとおもいますか。

なるべく早く行うべきだ 51
慎重に検討すべきだ 45
答えない 4

雑記

たまたま紙面を見る機会があったのでメモった。 ざっと探した範囲では、Webには載っていないようだ。 世論調査結果を発表するときは、質問票だけでも必ず同じ媒体で公開するようにしてほしい。 もしどこかで公開してあり、自分の探し漏れであればごめんなさい。

ソートの注意メモ

テキストをソートするとき、漢数字などが直感に反するというのはある程度意識にあるが、 実は超基本的な半角アスキー文字群の順番もかなり変なことになっていて時々罠にはまるので、 備忘のためメモ。

一般的にどうかは分からないが、自分はゆるふわに「記号→数字→英大文字→英小文字」の順になっているような気がしている。 しかし、実際にはアスキーコード部分(0x01~0x7F)の並びは以下の様になっている。

16進コード 種別 文字
01 - 1F 制御コード
20 スペース
21 - 2F 記号群1 ! " # $ % & ' ( ) * + , - . /
30 - 39 数字 0 1 2 3 4 5 6 7 8 9
3A - 40 記号群2 : ; < = > ? @
41 - 5A 英大文字 A - Z
5B - 60 記号群3 [ \ ] ^ _ `
61 - 7A 英小文字 a - z
7B - 7E 記号群4 { | } ~

注意しなければならないのは、こんな部分。

  • @;などは数字よりも後
  • 英大文字と英小文字は連続しておらず、間に記号がいくつか入る
  • _は英大文字より後だが英小文字よりは前!
  • カッコが支離滅裂で、()→ 数字 →<>→ 英大文字 →[]→ 英小文字 → {}

特に@_が罠過ぎると思う。

forfiles.exe についてのメモ

条件に合致する多数のファイルに対して一括処理を施したいケースは多い。 Windowsでこれを実現してくれるのが、forfiles.exeというコマンド。

www.atmarkit.co.jp

上の記事でも触れられているが、forfiles.exe の /C オプションの中では、 0x00の形式で特殊文字を使用できる。 記事中では0x09でタブですよと例示されているが、真に必要なのはダブルクォート。

/C オプションの引数はダブルクォートで実行コマンドを記述するのだが、 awksedワンライナーを書こうとするとどうしても入れ子でダブルクォートをする必要がでてくるので、 0x22でくくってやるわけだ。

> forfiles.exe /S /D -2017/12/31 /M *.log /C "cmd /c gawk 0x22{print $0}0x22 @path"

このコマンドは、カレントディレクトリ以下にある2017/12/31以前の*.logファイルを{print $0}する。

awkでsqlite3.exeの即席フロントエンドを作った

Windowsでsqlite3を使うにはRubyPHPなどから適当なライブラリ経由でアクセスする必要があると思い込んでいて、職場のリソース逼迫シンクライアントだと環境整えるハードル高いと感じてたのだが、↓のエントリをみて、sqlite3.exeとgawk.exeの2個だけでいけるじゃんと気づいた。

d.hatena.ne.jp

というわけで手元にあったsqlite3のDBを操作するラッパーというか即席フロントエンドをawkで作ってみた。

BEGIN {
  db = "test.db"
  command = "sqlite3 -header -column " db " \" %s \""
  printf "command? "
}

/^\.exit$/  { exit }

/^!/  {
    caution=1
    sub(/^[!]/, "")
}

/^[0-9]+$/  {
    sql=sprintf("select * from testtable where id=%s", $1)
}

/^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$/ {
    sql=sprintf("select * from testtable where ip=%s", $1)
}

/^[a-zA-Z][a-zA-Z0-9_-]+$/ {
    sql=sprintf("select * from testtable where host like \"%s%\"", $1)
}

sql!="" {
    print sql
    if(caution) {
        printf("execute? (y/n) ")
        getline can_execute
        if(can_execute ~ /^[Yy]/)
            system(sprintf(command, sql))
    } else {
        system(sprintf(command, sql))
    }
    caution==0
    sql=""
    caution=0
    printf "command? "
}

骨子はこんな感じ。自分用なので正規表現は超手抜き。実行はgawk.exe -f test.awkてな感じで実行するだけ。

サンプルはちょっとしたネットワーク管理表を操作するイメージコード。プロンプトで数値を入れると該当idのレコードを、ドット区切りの4つの数値を入れるとipアドレスとみなしてそのIPを持つホストのレコードを、英字で始まる1単語を入れるとその単語に前方一致するホストのレコードを表示する。

実使用しているコードはテーブルも1つじゃないし、もう少し複雑なクエリを出す構文なんかも用意してるけど割愛。常用するクエリをどんどん取り入れてやると捗る。

不安なときは入力の先頭に!をつけると、実行前に本当に実行するか聞いてくるようにした。

まあSQL文を手入力するような工程はあまりないだろうけど、手元のちょっとしたデータ整理用にsqlite3使うにはそこそこ便利で、即席な割にいいもの作った感がある。

言語設計者はこれを一億倍したくらいの充足感あるんだろーなー。

Android 5.1.1 が Nexus7 2012 w/3g に降ってきた

新機能なんかより、APN まわりの不具合が解消したかだけが気になるが、二日ほど使った感じでは、事象、頻度ともに変わってない。無念。

【復習】第16回春だからログ解析するぞシェル芸勉強会:03

続き。

Q3-1 ログの件数が一番多い曜日はどれ

gawk '{print $1}' access_log | xargs date ***** | sort | uniq -c

ってな感じでいけそう、 でもログの行数すごいからうまくxargsで処理できるのか? と思いつつ、man dateでフォーマット文字列を確認してたら、 date -f -なる便利オプションを発見して解決。

gawk '{print $1}' access_log | date -f - "+%w" | sort | uniq -c

Q3-2 ログの件数が一番多い時間帯はどれ

Q1と同じ。自分の中では定番となっていて、あまり他の方法を考え付かない。 結果的には速い方法だったぽいが、考えなしなのは良くない。

gawk '{h[substr($2,1,2)]+=1} END {for(i in h){print h[i], i}}' access_log | sort -rn

【復習】第16回春だからログ解析するぞシェル芸勉強会:02

【復習】第16回春だからログ解析するぞシェル芸勉強会:01 - ot2sy39's diary の続き。

Q1 NASAのログについて、ステータスコードを抽出して、どのコードがいくつあるか数えてみましょう

初手思いついたのがコレ。あるパターンの行の数を数えるとき、ついパターンをキーとした連想配列に出現回数を数えてしまう。

gawk '{status[$(NF-1)]+=1} END{for(i in status){printf i, status[i]}}' access_log

でもサンプル回答ではキーをプリントしちゃって、sort & uniq -c。

awk '{print $(NF-1)}' access_log | LANG=C sort | uniq -c

うむ、サンプルの方が間違いなくシンプル。

念のため手元の環境*1で処理時間を測ってみると、 だいたい連想配列版が半分くらいの時間で完了していた(やったね!)*2。 富豪なら無視するレベルだが。

連想配列 sort | uniq -c版
real 4.243s 9.335s
user 3.955s 10.130s
sys 0.286s 0.554s

Q2 NASAのログについて、ファイルを開かずに、ログの多い日を探しだしてみましょう

「ログの多い日」=「ファイルの行数の多い日」としか考えられず、 頭の中は以下のコマンドで占拠されてしまった。

wc -l 1995*

サンプル回答は「ls -l | sort -k5,5n | tail」。 「lsを使ってサイズを見たら開かないでも見当がつきます」とのこと。 まあそうだよね。

*1:さくらVPS(1G) 石狩第1ゾーン メモリ1GB ディスク100GB(HDD) CPU2コア CentOS 6.3(64bit) ローカルにまともなUNIX環境がないのでVPSでやってる……

*2:サンプル回答はawkだがCentOSなのでawk=gawk