Basic Werk | Blog | Contact


MEMOMEM

Perl_multi_sort



sort コマンドだと、日本語などのマルチバイト文字を無視してソートしてしまうので、Perl でこんなスクリプトを書いておいて、msort なんかのコマンドとして保存しておくと便利。



#! /usr/bin/perl use warnings; use strict;
my @lines = (); while (<>) { push @lines, $_; }
foreach my $line (sort @lines) { print $line; }


このやり方だと複数のファイルを読み込んだとき、全部をひとつの配列に突っ込んだ上でソートしてる。


#Perl #Shell #sort



SN 2013/07/08 01:04:13

Archives > Perl_multi_sort.html





Gauche_text_filter



Gauche のお勉強メモ。文字列処理。

整理しながらなんで全然まとまりないし改善の余地ありありですが。



;; カレントディレクトリを glob して ;; 末尾が .html のファイル名だけを取る (filter #/\.html$/ (glob "*"))
;; 逆に .html を省く (remove #/\.html$/ (glob "*"))
;; Perl でいうところの、 ;; open my $in, "<", "file_name"; (define in (open-input-file "file_name"))
;; 1行ずつ読み込み (read-line in)
;; Perl でいうところの、 ;; close $in; (close-input-port in)
;; ファイルの中身を丸っと読み込み (define str (call-with-input-file "file_name" port->string))
;; ファイルの中身を行単位でリストにして読み込み (define lst (call-with-input-file "file_name" port->string-list))
;; カレントディレクトリにあるファイル名のリスト (define files (glob "*"))
;; ファイルの内容のリスト (define values (map (lambda (file) (call-with-input-file file port->string)) files))
;; files と values を組み合わせた alist (define alist (map (lambda (f v) (cons f v)) files values))
;; いやいや、まとめてやりましょう。 (define alist (map (lambda (file) (cons file (call-with-input-file file port->string))) (glob "*")))
;; ファイルの内容に特定の文字列を含むファイル名 (map (lambda (lst) (and (rxmatch #/bla bla bla/i (cdr lst)) (car lst))) alist) ;; 但し、結果はこんな風に表示されてしまうので ;; -> ("foo.html" "bar.txt" #f #f)
;; マッチしなかった場合は結果から除く (remove (lambda (result) (eq? result #f)) (map (lambda (lst) (and (rxmatch #/bla bla bla/i (cdr lst)) (car lst))) alist)) ;; -> ("foo.html" "bar.txt")


参考:

Scheme:テキスト処理

http://practical-scheme.net/wiliki/wiliki.cgi?Scheme:テキスト処理


#Gauche #Scheme #Lisp #IO #Regex #Shell



SN 2013/06/30 00:59:19

Archives > Gauche_text_filter.html





FTP_Shell_Script_Job_Automatically



ftp コマンドの操作を一個のシェルスクリプトにまとめておくと便利。


僕の場合は、あるディレクトリ内のファイルを定期的にダウンロードして解析しなくちゃいけないジョブがあるので、こんな感じのシェルスクリプトを作って自動化してる。


※ ftp のパスワードは .netrc から読み込んでる前提。


#! /bin/sh ftp foo@bar.org <<END cd www/some/dir lcd /user/local/some/dir prompt mget * bye END


つまり、ftp コマンドにヒアドキュメントをそのまま実行させるというテクニック。


参考:

ftp転送をシェルスクリプトで - IT 東京 楽しいと思うこと

http://d.hatena.ne.jp/mikeda/20081027/1225121364


#ftp #ShellScript #bash



SN 2013/06/28 23:22:39

Archives > FTP_Shell_Script_Job_Automatically.html





Gauche_file_check



Gauche で Shell Script や Perl のように普通のファイルかとかチェックするには、



この辺りを使う。


(glob "*/") みたいなことも普通にできる。


こんな風に関数にまとめておくと便利かも



(define (-e x) (file-exists? x))
(define (-f x) (file-is-regular? x))
(define (-d x) (file-is-directory? x))


参考:

Gauche ユーザリファレンス

6.25.3.4 ファイルの状態

6.25.3.1 ディレクトリ


#Gauche #Scheme #Lisp #Shell



SN 2013/06/28 00:49:21

Archives > Gauche_file_check.html





netrc



ftp コマンドの省力化


UNIXの部屋 コマンド検索: ~/.netrc

http://x68000.q-e-d.net/~68user/unix/pickup?~/.netrc


#ftp #Shell



SN 2013/06/26 23:23:24

Archives > netrc.html