- blogs:
- cles::blog
Windows で手軽に awk を使うには
windows
cli
awk Windows で sed や awk などの Unix 系のコマンドラインツールを使いたい場合には Cygwin や WSL を使うことが多いと思いますが、もっと手軽に導入できる方法がないかと思って調べていたら busybox の win32 版を見つけたのでメモ。
busybox は1つのバイナリの中に様々な Unix 系ツールを内蔵しているアーミーナイフのようなアプリで、IT エンジニアに身近なところだと VMWare ESXi のコンソールのコマンドのほとんどは busybox だったりします。
BusyBox is a single binary that contains many common Unix tools. It's often found in embedded Linux systems like routers, in Android smartphones, in Linux containers and anywhere else it would be handy to have a compact set of Unix command line tools.
Windows でちょっとしたバッチを書いていて「どうしても awk が使いたい!」ということになった時に非常に役に立ちます。
Postfix のバーチャルドメインで Mailman
postfix
mailman
awk Postfix と Mailman の連携については公式の Wiki に 「DOC/Mailman - Postfix integration with Mailman generated transport or other maps - Mailman Wiki」というドキュメントがあり、virtual_to_transport というスクリプトを作って transport_maps 用のファイルを生成する方法が解説されています。
ただ、この方法でも結局 local に配送して alias で処理をするという部分は変わらないので、純粋にバーチャルドメインだけで Postfix + Mailman 連携ができる方法がないかと思っていろいろと試行錯誤してみました。
参考にしたのは「[mmjp-users 1929] Postfix で純仮想ドメイン (思いつき)」という投稿。基本路線はこれを踏襲しますが、具体的な transport_maps 用のファイルの生成方法が書かれていなかったので、以下のようなスクリプトを組んでみました。
/etc/mailman/virtual_to_transport
Postfix 側の設定として/etc/postfix/master.cf に以下の行を追加しておきます。
さらに /etc/postfix/main.cf の既存の設定に以下を追加します。
(・・・・の部分は既存の項目に読み替えてください。既存の項目がなければ新規に項目を追加します。)
これで上手く動いているようなのですが、少し調子を見てみたいと思います。
awk で指定した n カラム目以降を出力する
awk awk では各カラムを $1, $2, $3, $4 ・・・・ という感じでアクセスできるようになっていますが、 n カラム目から最後まですべて出力したかったのでスマートな方法がないかどうか調べてみました。
どうやらあまりスマートな方法はなくて、以下のようにfor 文を使って繰り返しで書くしかないようです。
これならば以下の cut を使った場合の方がスマートですね。
awk で自身のプロセス ID を得る
awk 例えば bash で自身のプロセス ID を知りたい場合には $$ という特殊変数を参照することができます。
今日はこれと同じことを awk でやろうとしたらハマってしまったので、後学のためにメモ。
やりたかったのは下記のような感じのログにタイムスタンプを付与するスクリプトにプロセス ID を追加することでした。
マニュアルを隅から隅まで調べていくと、PROCINFO["pid"] という特殊変数に入っているみたいです。
もしかしたらこれは gawk でないと動かないかもしれません。
The GNU Awk User’s Guide: Auto-set
とりあえずこれを使ってやりたいことは達成できました。
awk に標準出力をバッファさせないようにする
awk
sh vmstat の出力にはタイムスタンプがないので、こんな感じで awk を使ってタイムスタンプをつけていたのですが、これをファイルにリダイレクトして、そのファイルを tail -f で追いかけてみても一向に内容が更新されないという現象が発生して困ってしまいました。
コンソールでは問題ないのに、リダイレクトすると問題が出るというパターンは、これまでにも C 言語の printf() や Python でハマった経験から、標準出力のバッファリングの問題に間違いないということで、今日は awk の標準出力のバッファリングを無効にする方法を調べてみました。
[awk に標準出力をバッファさせないようにする の続きを読む]
プログラミング言語 AWK が復刊
awk
復刊
oreilly 絶版になっていたプログラミング言語AWKが復刊されるようです。本格的な言語として使うということは少ないと思いますが、シェルスクリプト中のちょっとした文字列加工をやるにはAWK便利ですからね。
プログラミング言語AWK A. V. エイホ、P. J. ワインバーガー、B. W. カーニハン 著/足立高德 翻訳 販売ページ
1989年に初めての邦訳が刊行され、その後何回か絶版の憂き目にあいつつも、不死鳥のごとく蘇り、様々な出版社から復刊を果たしている「プログラミング言語AWK」。この度、AWKファンの熱い声に支えられ、USP出版から3回目の復刊を果たします。
テキスト処理と演算に絶大な効果を発揮する「AWK」は、開発当時の1970年代から、開発者たちによって「30年後、ハードウェアの性能が向上するころに、その真価がわかるだろう」と予言されていたといいます。事実、インターネットの普及により、テキストで書かれたHTMLが大量に生成され、多くの人がテキストデータに触れるようになった昨今において、軽量で簡単にテキストを処理することができるAWKの良さが見直されつつあります。
僕もいちおう新紀元社発行(写真のもの)のやつは持っているですが、シェルスクリプトと組み合わせて使うような場合を考えると、オライリーの「sed&awkプログラミング」の方が役に立つかもしれません。
久々のawkで
awk
programming 100個以上もあるcsvファイルの先頭の一行(列ラベルの部分)を切り取って一つのファイルにまとめないといけないという状況に追い込まれたので、awkを使ってさっくり片付けてみました。こういうときのためにノートPCにもCygwinを入れておいて正解でした。
昔はログ集計なんかに良く使っていたんですがすっかりご無沙汰だったので、どうしてもこのFNRが思い出せなくてしばらく悩んだ末*1、本棚のsed&awkプログラミングに頼ってしまいましたけど。おそらくperlのワンライナーでも同じように書けると思うんですが、perlも最近使っていないのでawk以上にどうかいたらいいか浮かんできませんでした。
- *1: 最初NRと書いてたんですが、そうするとすべてのファイルを通算して最初の1行目しか削除されなかった。
- sadpkv
- CACHEMANAGER.phpというのはどうだろうかと
- pairb1m
- Lightning のToDoリストを複数のPCで共有できるアドオン
- majodca
- 九州旅行から帰ってきました
- majodca
- 九州旅行から帰ってきました
- hot534
- yum を使って OpenVPN をインストールする
- dresssu3
- NP_Trackbackを騙るトラックバックspamについて
- zippern7o
- NP_SpamBayesJP jp1b
- park81o
- Google Docs をメールフォームとして使う
- fogmpl
- なんで官庁の文章はPDFなんだろうか
- cutjw9
- 即席スライドショーを作る
- frightenlho
- 添付ファイルの容量を表示する「Attachment Sizes」
2 . 福岡銀がデマの投稿者への刑事告訴を検討中(5022)
3 . GitHub が全ての公開リポジトリへのシークレットスキャンを有効に(4164)
4 . 年次の人間ドックへ(4092)
5 . 2023 年分の確定申告完了!(1つめ)(3948)
Academic[574]
Book[155]
Diary[522]
Disaster[101]
Foodlogue[1425]
Game[284]
Goods[805]
Healthcare[341]
Hobby[32]
IT[1195]
Military[343]
misc.[1570]
Mobile[510]
Music[38]
Neta[106]
News[95]
Photo[391]
RealEstate[120]
Security[1178]
SEO Contest[36]
Software[634]
Tips[1886]
Travelogue[1238]
Web[675]
Work[193]


