Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

2015-09-01から1ヶ月間の記事一覧

よく使う関数はawkスクリプトとして保存して適時読み出すと楽

awk

よく使う関数はawkスクリプトとして保存して適時読み出すと楽になるケースがあります。 awkスクリプトは-fオプションで読み込みます。 その後で、ワンライナーやら何やらが使えるので使いどころによっては重宝します。 実際のところ 参考もとのモノをベース…

AWKでRSSデータを扱うときには「myrss」を使うと便利

awk

導入 $ wget http://lawker.googlecode.com/svn/fridge/lib/awk/myrss.awk 使い方 $ gawk -f myrss.awk --source 'BEGIN { print "<ul>"; print myrss("rss;lawker.bl ogspot.com/feeds/posts/default?alt=rss;5","<li>\n"); print "</ul>" }' <ul> <a href="">Mar 01</a>Michael Sanders dem</ul>…

AWKで末尾からN個目のフィールドを得たい場合、$(NF - N)とするだけ

AWKで末尾からN個目のフィールドを得たい場合……rubyでいえば ary[-2] 何のことはなく、フィールド数を示すNF変数から、任意の数値を引くだけです。 実際のところ a~fまでの文字のうち、最後から2番目のレコードを得る場合は以下のようにします。 $ echo 'a …

AWKでも連続して変数を代入できる

awk

AWKでも連続して変数を代入することができます。 同じ値を複数のフィールドに突っ込む場合に特に有効です。 実際のところ 1、2、最終のフィールドを"nil"としたい場合を考えます。 この場合、以下のように=で変数を結んであげるだけで連続して指定できます…

awkでEND部分の変数に+0をつける慣習について

awk

人様の書いたawkスクリプトをみてると、時折END部分で変数に+0をつけるものがあったりします。 たとえば、こんな感じ。 $ cat data.csv | awk '/Saitama/{tot++} END{print tot+0}' 2これは、awkの変数がjavascriptと同様かなり自由度が高いことと関係してい…

非POSIX環境のAWKでバイナリデータを弄り回したい場合、BINMODEオプションが使える

awk

非POSIX環境の場合、改行ルールが違ったりパスの記法が異なったりで若干使い勝手が変わるケースがあります。 こういう場合、gawkやmawk、cygwinのawkに実装されているBINMODEオプションを使うと挙動をPOSIX準拠にすることができます。 If BINMODE is `"r"', …

NRとFNRのちがい

awk

NRとFNRのちがいは、 NRが通し番号なのに対して、FNRがファイル毎に振られる番号であるという点があります。 実際のところ 以下のようなファイルがあったとします。 $ tail 111.txt 000.txt ==> 111.txt <== abc withdrawal def payment xyz deposit xxx bal…

sedで特定範囲のみに正規表現を適用する

sedで特定範囲のみに正規表現を適用する場合、 範囲を指定した上でいつものように正規表現をあてます。 実際のところ 101,Hyōgo,Takarazuka,"225,587","219,862",2.6,39.3,"5,740",Special city 102,Kanagawa,Atsugi,"224,426","222,403",0.91,36.2,"6,200",…

AWKにも組み込み関数がある

AWKにも組み込み関数があります。 どれもやろうと思えば自力でできる内容ではあるのでしょうが…… index(string,search) length(string) 与えられた文字列の長さをみる split(string,array,separator) 所定の文字で分割します。 結果はarrayに格納されます…

特定のカラム”だけ”不要という場合、あえて空白文字化してしまう手もある

awk

カラムの大半が必要だけど、 アタマの通し番号が邪魔だな…… 末尾の注釈が要らないなぁ…… 等々、特定のカラム”だけ”不要という場合、あえてその部分だけ空白文字化してしまう手もあります。 実際のところ 前回扱った日本の都市情報のうち、最初と最後のカラム…

NFと$NFの違い

awk

特殊変数のNFと$NFは、それぞれ明らかに異なった動きをします。 前者は項目数、後者は最後の項目の内容を格納しています。 実際のところ 以下のようなファイルがあったとします。 $ cat sample.txt foo vivit 42 bar 10 buzz 34 piyo 11これについて、NFと$N…

AWKでもwc的なことができる上に便利

awk

AWKでもwc的なことができます。 その上、そのままprintfにつなげたり、正規表現を使うことができたりで便利です。 実際のところ List of Japanese cities by population - Wikipedia, the free encyclopediaから作成した 日本の都市名リストを使い、検証して…

オープンソースなスペースオペラゲーム「スターコントロールⅡ」

スターコントロールⅡは日本だと3DOで発売された戦略ゲーです。 私は中学生ごろにプレイして何とかクリアできました。 ゲーム内容としては資源を集めて宇宙艦隊を強化し、様々な異星人と同盟結んだり煽って戦わせたりできます。*1特に特徴的なのが異星人と…

sedで最初と最後の行を表示する

$ seq 10 20 | sed -n '1p;$p' 10 20あたま数行を出したいだけなら、カンマ区切りで切れば良いです。 末尾数行ってのはやや苦しい感じです $ seq 10 20 | sed -n '1,3p' 10 11 12 参考もと sed -n '1p;$p' # Print the first and last line of stdin.— Comma…

AWKのORS変数を設定すれば、レコードを特定の文字で結合できる

awk

ORS変数は出力レコードを特定の文字で結合できるものです。 実際のところ $ seq 20 30 | awk 'ORS=NR%5?", ":"\n"' 20, 21, 22, 23, 24 25, 26, 27, 28, 29一部の資料では"ORS=%NR%5"とかNRの前に入ってますが、誤植です。他のスクリプトで似た事やるのはち…

AWKのOFS変数を設定すれば、要素間の区切り文字を設定できる

awk

AWKの要素間の区切り文字はデフォでは空白文字です。 これを設定するのがOFS変数です。 実際のところ 各要素を"***¥n"で区切りたい場合を考えてみましょう。 前回のものをベースにする場合、OFSの部分を以下のように追加します。 BEGIN {OFS="***\n"; FS="</item>\n…

AWKのFSは単体の文字で無くてもいい

awk

Yahoo!ニュース・トピックス - サイエンス から、RSSのファイルを取得してきます。 $ curl http://news.yahoo.co.jp/pickup/science/rss.xml > rss.xml $ cat rss.xml | nl 1 2 <rss xmlns:blogChannel="http://backend.userland.com/blogChannelModule" version="2.0"> 3 <channel> 4 <title>Yahoo!ニュース・トピックス - サイ…</channel></rss>

【読書メモ】東アジア内海世界の交流史

最近、流通の歴史に興味が出てきたので、色々調べてます。 今でこそ電子商取引といった実物抜きの取引が実現してますが、 経済の基本はモノのやりとりです。今回紹介する「東アジア内海世界の交流史」も、 そういった日本や中国、東南アジアにおけるモノのや…

AWKで特定の条件に一致する行数をカウントする

awk

BEGINとENDを使えば、特定条件に一致した行をカウントするのも比較的楽にできます。 BEGIN { count = 0 } $1 % 3 == 0 && $1 % 5 == 0 { count = count+1 } END { print "I found " count " fizzbuzz numbers. :)" }てなファイルを用意した上で $ seq 1 100 …

AWKで表示する行範囲を指定する

awk

AWKでは、ANDやORを使った条件指定ができます。 これと行番号を意味するNRを組み合わせることで行範囲を指定することができます。 実際のところ たとえば……4行目から7行目までを表示したいなんてケースがあった場合、 $ seq 1 100 | awk '( NR < 3 ) && (N…

Google DriveにはOCR機能がある

おっタマゲました。 Goole DriveにはOCRの機能があります。 PDFや画像から文字を引き出す事が可能です じっさいのところ 以下のような感じで、「Hello, OCR!」というワードアートが出てる画像があったとします。 これを、右クリックして「アプリで開く」=>「…

hyperscriptで連続した要素をレンダリングしたい場合各要素にKEYをもたせておく

hyperscriptでもJavascriptのmap関数をつかう事で、 連想配列の中身を連続してレンダリングする事ができます。 子要素のliタグなんかを生成する時には特に有効ですね。ここで気をつけなければならない事として 同一のセレクターである場合、 識別用のIDを振…

maquetteでアニメーションさせるには「JSサイド実装」「CSSサイド実装」の二パターンがある

maquetteでアニメーションをさせたい場合、 「JSサイドの実装」と「CSSサイドの実装」のにパターンがあります。 実際のところ JS実装 公式から例を引用するとVelocity.jsのような外部ライブラリの力を借りつつ、 全部JSでやる方法があるようです var itemNrs…

「html2hscript」はhtmlをhyperscriptにコンバートしてくれる

「html2hscript」は、その名の通りhtmlをhyperscriptにコンバートしてくれるライブラリです。 導入 node.js関連なのでnpmで一発 $ npm install html2hscript つかいかた var parser = require('html2hscript'); parser('<h1>Hello World</h1>', function(err, hscript…

「レファレンス協同サービス」で司書さんが調査した情報を過程を含めてみる事ができる。

情報の時代21世紀に入って15年以上がたちました。 アメリカで出ている新聞の朝刊一日分が、中世の農民が一生に触れる情報に匹敵するなんて話も出るほど、この世には情報が溢れかえっています。 さらに図書館やインターネットの普及により、それら情報へ…

「従業員」は存在せず、「労働者」のみがそこにある

使用者と労働者……という表現はよく聞きますね。 前者はお金出して働く場を作る側。 後者は、その場で働くかわりにお金をもらう。ここで気になるのが、後者と同じ立場と思われる「従業員」という立場。 ……「労働者」と「従業員」て何が違うんでしょう? 自社…

masquetteのscheduleRenderについて

masquetteでアニメーションする場合の処理は 1. The projector waits until its scheduleRender() function gets called one or more times. 2. The projector waits until the browser signals it is ready to paint the next frame (using requestAnimatio…

hyperscriptのstyle attributeについて

hyperscriptには、スタイル属性を付加することができます。 公式によれば、 h('h1.fun', {style: {'font-family': 'Comic Sans MS'}}, 'Happy Birthday!') h('h1.fun', {style: 'font-family: Comic Sans MS'}, 'Happy Birthday!') という二パターンの記述法…

javascriptでhtmlを生成する魔界技術「hyperscript」

masquetteは学習コストが低いそうです。 でもね、その前にhyperscriptの学習コストが必要でした。hyperscriptはJSのスクリプトからHTMLを吐き出す怖さのある技術で、 mercuryというVirtualDOM系フロントエンドフレームワークで採用されているものです。公式…

軽量・高速なVirtualDOM用フレームワーク「Maquette」

MaquetteはVirtualDOM向けフレームワークです。比較対象として挙げられているのは……個人的に魔界技術と認定するReact。 これだけで、話聞いた時には逃げ出しそうになりました。 だって、これ怖いエンジニャーが積極的に記事にしてるアレじゃないですか…… で…