プログラミング

Goでトークナイズ処理してみる。

Goのtext/scannerを使うと、トークナイズ処理ができるらしい。やりたいことは単純で スペースに区切られたログをタブ区切りにしたい。 一回の読み込みでスペース区切りしてみたい。(→なのでトークナイザを使う) ただ少し難点があって "aaa bbb ccc" [2018-04…

【python】組み込み関数open()でTypeError: an integer is required

open()でファイルを読み込もうとしたら こんなエラーがでた。 file = "zzz_test.txt" with open(file, "r", "utf-8") as f_r: print f_r.readline() Traceback (most recent call last): File "zzz_opentest.py", line 3, in <module> with open(file, "r", "utf-8")</module>…

echo でバックスペース文字を出力するオプション

たまにjsonの中身に\nが入ってて 「なんでこんなの入ってるのかなー?邪魔だなー」と思ってました。 わざわざ取り除くのがめんどうだなーと削除してました。例えばAWSのSQSメッセージを見てそのままechoで出力しようとすると \nが入ってて適切に出力されず、…

シェルコマンドのオプションの意味ならこれが便利!

シェルのコマンド理解してますか?僕はうろ覚えでやってます。 昔こうやってた、で覚えて今はそのまま何も考えずに そのオプションをつけてコマンド実行とかやってます。 最近になるとman で調べるのもおっくうで。。。でもこんなんではダメエンジニアになっ…

泥臭いアクセスアップのコツが参考になった

株本さんと言うStockSun株式会社を経営してらっしゃる方のブログを たまたま見ていたらこんな記事があった。ss-kabumoto.hatenablog.comこういう泥臭い手法すごく好きです。すごく参考になったので貼り付けておく。

シェルで最後に改行の無いファイルを読むと最後の行は読み飛ばされる

たまーにあるんだけど windowsで作ったファイルをlinuxで読み込むと BOMが入ったり、末尾に改行がなかったりする。その末尾の改行がないファイルを読み込むと 最後の行が読み飛ばされることがあった。気づくまですげーめんどくさかった。。。 まあ解決方法は…

curl でURLのファイル存在確認をするには

これでOK curl -LI http://google.com/ # いろいろ返ってきますがリクエストの結果が返ってきます HTTP/1.1 200 OK Date: Tue, 10 Jul 2018 07:39:16 GMT Expires: -1 Cache-Control: private, max-age=0 Content-Type: text/html; charset=ISO-8859-1 P3P: …

正規表現を確認するのに便利ツール

正規表現を確かめるのに このサイトは便利だった。regex101.com ログをパースするとかけっこう悩むんですよね。 他にも探してみるといろいろありました。 regexper.com qiita.com regex-testdrive.comやっぱ自分は最初のサイトの方が使いやすいかな。 詳説 …

シェルスクリプト内で計算処理したい

シェルスクリプトでちょっとした計算したい時のメモ いくつか方法はありますが、下記が簡単二重カッコをつけるとできる。 XXX="90" YYY=$((${XXX}+10)) echo ${YYY} # <-- 100 他にもexpr でもできるけど 掛け算はダブルクオート("*") つけないとだめとか制…

【シェルスクリプト】タブ区切りファイル(tsv形式)を読み込むには

シェルスクリプトを書いててtsv形式のファイルを読み込んで パースする時にちょっと困った。単純に while read LINE で読み込んで cut でもすればいいだろうと思ったら どうもうまくいかない。どうやら勝手にタブがスペースになっているようだ。理由はよくわ…

【シェル】【エラー】ヒアドキュメントのEOFの前にスペースは入れてはいけない

みたいです。これはちょっとハマりました。 ヒアドキュメントとは ヒアドキュメントという機能を知っていますでしょうか?簡単に言えば複数行で文字列を表示させる機能です。 Qiitaで探すといっぱいでてきます。 詳しい機能は下記など、いろいろ探してみてく…

Hiveでpartitionはテーブル定義と紐づいているようだ

Hiveのテーブルにカラムを追加した時に 追加したカラムがスッカスカでデータが取れないことがあった。結論から言うと、パーティションが変更前のテーブル定義と紐づいてるから 追加カラムの値が取れなかったってこと。なのでパーティションを作り直すと追加…

プロセスの並列とCPUの効率性

Goでプログラムを書くと処理が早い。ファイル処理のプログラムを書いていたのだけど 1ファイルの変換プログラムを書いたら、そのまま並列処理をさせようと設計検討をしていた。そしたら上司から「順番は意識しなくていいのだから、1CPUで1ファイル処理させる…

Goでロガーを作ってみた

Goでロガーを使おうとするとなかなかいいのがない。logパッケージのやつをそのまま使おうとするとなんか物足りなく使いにくい。 誰かが作ったやつも使いにくい。blog.hde.co.jpこういうのあるみたいだけどなんかしっくりこない。。。なのでlogパッケージをも…

while で sshコマンドを実行すると1回しか実行されない

タイトルどおりなのですがすごく悩んだあげく ググってみたらすぐ解決策が見つかったのでメモしておく。たとえば下記のようにファイルを読み込んで毎回毎回ssh ログインしてコマンドを実行するとどうなるか? while read LINE do ssh user@host hostname don…

Go言語でプロキシ経由でs3からダウンロードする

go言語でs3からダウンロードする方法は探せばなんとか見つかりました。 でもプロキシを使うケースがよくわからず、なんとかコーディングしてみたので備忘として載せておく。 Go言語でs3からファイルダウンロード+プロキシ使う版

36歳で初めてgithubにプルリクやってみました。

恥ずかしながらあえて言おう。 俺は昨日初めてgithubにプルリクを出してみたと。 (そしてそのプルリクはリジェクトされたけどね。。。)社内のgitやgitlabには当たり前のようにプルリクをやりますが、 githubのOSSで他人様の書いたライブラリにプルリクを出す…

プログラムの処理時間を計測する簡単な方法(ボトルネックを探す)

プログラムを作ってる時、機能的なエラーは作ってるうちにわかりますよね。 ですが性能的なボトルネックは使ってみないとわかりませんよね。 この関数かな?とあたりをつけて改善していくことでしょう。たまたま1ファイルの処理についてのプログラムを書い…

大きいファイルの作成時刻を取得する時は要注意

ファイルが作られた時刻を取得したくてGoで調べてました。やりたかったことは、あるディレクトリを監視して ファイルが増えたら、新しいファイルのみ取得したいと思ってました。じゃあこうしよう 「保存用最大ファイル作成時刻」とした変数を0としておく デ…

けっこう便利な trap コマンドなんて知らなかった

あんまりシェルスクリプトは好きじゃないんだけど インフラやってるとシェルスクリプトを書くことがある。その中で他人が書いたコマンドに trap というコマンドがあった。罠…??なんかおどろおどろしい感じがしたけど 調べてみると、なんとまあ便利なコマンド…

pythonでシェルを実行する方法

サーバーでのちょっとした処理をpythonで書くことがあるんだけど pythonからシェルを実行するのどうやるんだっけ? 毎回忘れてしまうので、メモしておく。 とりあえずの使い方 import subprocess cmd = "ls -l" subprocess.Popen(cmd, shell=True) subproces…

Cent OSにawslogs-agent 入れようとして苦労した話

EC2インスタンスからパカパカログを検知して cloudwatchに入れたいねという依頼があったのでやってみた。 苦労したところがあったのでメモ。pythonのバージョン差異でエラーが出る出ないがあるようだった。 でも調べることが目的じゃないので精査してない。…

pythonでユーザー名を取得する

ユーザー名の取得方法はいろいろあります。 下記のやり方があります。 ユーザー名の取得 そんで調べてたらgetpass.getuser()のソースを調べてる人がいて LOGNAME, USER, LNAME, USERNAME から値を取ってたんですねー なるほど qiita.com (Pythonに関連したこ…

pythonでホスト名を取得する。

ホスト名の取得方法はいくつかあるようです。 下記で簡単に取得できます。 ホスト名を取得 ホスト名はどこからとってるのかなと調べてたら こんなpythonの実行もあるのか! github.com python 実行する時に -c でスクリプトを実行できるんですね。 これは便…

文字列数字をint型数値リストに変換

config に数値を書いておいて、その数値リストを使いたい場合があります。 そこで取得した文字列数字をsplitで分割しても、単なる「string」の数字のリストになってしまうんですよね。 でどうしよっかなと、俺の性能が良くない頭で考えてしまうと それぞれの…

logging formatで定義に無いものを書く方法

以前のブログでlogging.propertyの書き方を書いていました。 suganoo.hatenablog.com ※logging.propertyだかlogging.confだか、どっちが適切な表現なのかはここでは置いておく。 logging.confを書いている時に、あれこんなことできないかなと悩みました。 ロ…

【globals()の使い方】文字列のクラス名からインスタンス生成する

こんな処理をするスクリプトを作っていました。 ログをダウンロードして ログパースして webサーバーにアップロード このログをパースする処理なんだけど、ダウンロード/アップロードは変わらない。 ログの種類がある程度決まってるから、実行する時にログパ…

pythonでlistの重複を除くにはsetが便利

pythonにはrubyのようにuniq関数は無いようです。 リストの値をsetにして、再度リストにすると重複が除かれます。 なんで順番くずれるんだろうね。 リストで重複除く

JSONパースのTypeError: string indices must be integersでハマった

jsonパースのところで値を取得しようとしたら、TypeErrorとかのエラーが出た。なんだこりゃ、全然わかんねーと、かなりもがいてしまった。 SQSからもらうメッセージみてもぜんぜんjson形式として悪いところはなさそう。ダブルクオーテーションが悪いのか!?…

2か所にあるファイル存在を比較するにはsetが便利

2か所にファイルを保管してて、それらのファイルの存在確認をすることがあった。具体的に言うと、例えば Webサーバー上にあるファイルと、ローカルに保管したファイルが同じと仮定。 それが一致しないことがあるから、数が一致してるかを確認したい。 もしく…