Deprecated: The each() function is deprecated. This message will be suppressed on further calls in /home/zhenxiangba/zhenxiangba.com/public_html/phproxy-improved-master/index.php on line 456
awk だけで which (w - 日本 GNU AWK ユーザー会 0.2
[go: Go Back, main page]

Hatena::ブログ(Diary)

日本 GNU AWK ユーザー会 0.2 このページをアンテナに追加 RSSフィード

2008-04-10

[]awk だけで which (w

昨日、find を awk だけで作ろうとして断念したけど、which ならば。

#! /usr/bin/gawk -f
# which.awk - which command
# usage: gawk -f which.awk command
BEGIN {
    for(i = 1; i <= split(ENVIRON["PATH"], a_path, /:/); i++) {
        name = a_path[i] "/" ARGV[1]
        if (getline < name >= 0) {
            print name;
            exit;
        }
    }
}

実行結果はこちら。

$ gawk -f which.awk xgawk
/usr/local/bin/xgawk

find も shell に頼っていいなら作れるかもしれない。

副産物

#見えないじゃないか! by シャア

            BEGIN{;;;for(i=1;
            i<=       split(\
            ENVIRON["PATH"],
            aa,       /:+/);
            i++){n=aa[i]"/"\
            ""        "#""#"\
            ARGV[1];gsub("#",
               "",    n);
             ;if(     getline  <\
            n>        0){print n;
        exit;             }}}#end

t2y-1979t2y-1979 2008/04/11 04:42 書いてくれると信じていました(w
split を入れ子にするのは、うまいやり方ですね。得心しました。
getline での判定しかできないのが awk の悲しい性(; ;)

RoccoRocco 2008/04/11 23:50 getline はやはり特殊なんですよね。使いにくいです。でも、ファイルテスト演算子がなかったり、stat コマンドのようなものを持っていないのは正解かな。shell との住み分けができているんだろうなと思います。

auk は卵から産まれますから、殻に守られないと成長できません。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/Rocco/20080410/p1