|<< 2005.07/1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 >>|

MAN HIMAZINE INTERFACE 3.1

ã“ã®ã€Œã«ã£ãã€ã«ã¯æš´åŠ›ã‚·ãƒ¼ãƒ³ã‚„ã‚°ãƒ­ãƒ†ã‚¹ã‚¯ãªè¡¨ç¾ãŒå«ã¾ã‚Œã¦ã„ã¾ã™ã€‚

業務連絡
ZXH ã§å§‹ã¾ã‚‹ãƒ¡ãƒ¼ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹ã¯ SPAM ãŒå¤šã„ãŸã‚ã€å»ƒæ­¢ã—ã¾ã—ãŸã€‚ ã”連絡㯠iyahaya ã§å§‹ã¾ã‚‹æ–¹ã®ãƒ¡ãƒ¼ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹ã‹ã€ ã‚ã‚‹ã„㯠twitter ã® @zetamatta ã¸ãŠé¡˜ã„致ã—ã¾ã™ã€‚

(2005.07.03)

$ [oldtype] 番組ã®é€”中ã§ã™ãŒã€æŒ‘戦状ã«ã¯ç­”ãˆã­ã°ãªã‚‹ã¾ã„ï¼ [B!][n user]

複数ã®ãƒ•ァイルを一行ãšã¤èª­ã¿å‡ºã—ã¦å‡¦ç†ã—ãŸã„時ã«ã€ ã©ã†ã—ã¦ã‚‚変数ãªã‚Šé…åˆ—ã«æ ¼ç´ã—㦠ENDã®ä¸­ã§å‡¦ç†ã—ãªã‘れã°ã„ã‘ãªã„ã‚ãŸã‚ŠãŒawkã®é™ç•Œã‹ãªã¨æ€ã†ä»Šæ—¥æ­¤é ƒ

awk ãŒæœ€é©ãªæ‰‹æ®µã¨ã¯ã„ãˆãªã„ã‹ã‚‚ã—れãªã„ãŒã€ awk ã®é™ç•Œã§ã¯ãªã„ã“ã¨ã‚’証明ã›ã­ã°ãªã‚‹ã¾ã„ï¼

見ã¦ã„ã¦ãã‚Œã€æ–°å‡ºå…ˆç”Ÿï¼ (昔ã€Dr.H , F ã¨å…±ã«ã€ã“ã®å…ˆç”Ÿã« awk ã‚’ç¿’ã£ãŸã‚‰ã—ã„:マジ)

((lb))hayama@YUKIKAZE tmp((rb))$ cat awkpaste2.awk
#!/usr/bin/gawk -f

BEGIN{
    for(;;){
        succ = 0;
        line = "";
        for( i = 1 ; i in ARGV ; ++i ){
            if( status((lb))i((rb)) != "NG" && getline < ARGV((lb))i((rb)) ){
                line = line "\t" $0
                succ++;
            }else{
                line = line "\t"
                status((lb))i((rb)) = "NG";
            }
        }
        if( succ <= 0 ){ break; }
        print substr(line,2);
    }
}
((lb))hayama@YUKIKAZE tmp((rb))$ ./awkpaste2.awk foo bar goo
A       D       W
B       C       X
C       B       Y
D       A       Z
((lb))hayama@YUKIKAZE tmp((rb))$

ã§ã‚‚ã€ã“ã“ã¾ã§ã‚„ã‚‹ã‚“ã ã£ãŸã‚‰ã€ç´ ç›´ã« Perl・Ruby・Python ã¨ã‹ä½¿ã£ãŸæ–¹ãŒã„ã„ã¨æ€ã„ã¾ã™ã‘ã©ã­ã€‚

$ [oldtype] join 㨠paste を勘é•ã„ã—ã¦ãŸã‚Šã—㦠[B!][n user]

実ã¯é€”ä¸­ã§æ°—付ã„ã¦ã¯ã„ãŸã‚“ã ã‘れã©ã‚‚〠二ã¤ã®å¼•æ•°ã—ã‹å–れãªã„ã®ã¯ join ãªã®ã«ã€ paste ã¨æ··åŒã—ã¦ã„ãŸã‚Šãªã‚“ã‹ã—ã¦ã€‚

ã¨ã„ã†ã“ã¨ã§ã€join ã® gawk 版を作ã£ã¦ã¿ã‚‹ãŒã€ ã“ã“ã§ã€ join ã®ä»•様をå†ç¢ºèªã€‚

FILE1 㨠FILE2 ã¯å®Ÿè¡Œå‰ã« join フィールド㮠昇順ã«ã‚½ãƒ¼ãƒˆã—ã¦ãŠã‹ãªã‘れã°ãªã‚‰ãªã„ (数値順ã®ã‚½ãƒ¼ãƒˆã¯ã ã‚)。

æ€ã£ãŸä»¥ä¸Šã«ãƒ˜ã‚¿ãƒ¬ä»•様ã§ã™ã€‚

ã“れãªã‚‰ã€åˆ¥ã«é€£æƒ³é…列ã¨ã‹ã§ã€ãƒ¡ãƒ¢ãƒªå–°ã†ã“ã¨ã‚‚ãªã〠gawk ã§å®Ÿè£…å¯èƒ½ã§ã™ãƒ¨ã€‚

((lb))hayama@YUKIKAZE tmp((rb))$ cat awkjoin.awk
#!/usr/bin/gawk -f

BEGIN{
    for(;;){
        if( ! (getline < ARGV((lb))1((rb)) ) ){
            exit;
        }
        fail = 0 ; line = $0 ; keyword = $1
        for( i=2 ; i in ARGV ; ++i ){
            do{
                if( length(nextline((lb))i((rb))) > 0 ){
                    $0 = nextline((lb))i((rb));
                    nextline((lb))i((rb)) = "";
                }else if( ! (getline < ARGV((lb))i((rb))) ){
                    exit 0;
                }
            }while( $1 < keyword );
            if( $1 != keyword ){
                nextline((lb)) i ((rb)) = $0;
                fail++;
                break;
            }
            $1 = ""
            line = line $0
        }
        if( fail == 0 ){
            print line;
        }
    }
}
((lb))hayama@YUKIKAZE tmp((rb))$ cat j1
A0 j1-1行目
A1 j1-2行目
B0 j1-3行目
B1 j1-4行目
C0 j1-5行目
C1 j1-6行目
((lb))hayama@YUKIKAZE tmp((rb))$ cat j2
A0 j2-1行目
A1 j2-2行目
A2 j2-3行目
B1 j2-4行目
C1 j2-5行目
((lb))hayama@YUKIKAZE tmp((rb))$ cat j3
A1 j1-1行目
B1 j1-2行目
((lb))hayama@YUKIKAZE tmp((rb))$ ./awkjoin.awk j1 j2
A0 j1-1行目 j2-1行目
A1 j1-2行目 j2-2行目
B1 j1-4行目 j2-4行目
C1 j1-6行目 j2-5行目
((lb))hayama@YUKIKAZE tmp((rb))$ ./awkjoin.awk j1 j2 j3
A1 j1-2行目 j2-2行目 j1-1行目
B1 j1-4行目 j2-4行目 j1-2行目
((lb))hayama@YUKIKAZE tmp((rb))$

ãƒã‚°ã‚らã°ã€å¾¡æŒ‡æ‘˜ã„ãŸã ã‘れã°å¹¸ã„。 共通フィールドã¯ä¸€åˆ—目固定ã¨ã„ã†ã¨ã“ã‚ãŒãƒ˜ã‚¿ãƒ¬ã§ã‚りã¾ã™ãŒã€ ã¾ãã€ãれã¯ãƒ—ログラム中ã®ã€Œ$1ã€ã¨è¡Œã®é€£çµéƒ¨åˆ†ã‚’ 少々変ãˆã¦ã„ãŸã ã‘れã°ã‚ˆã‚ã—ã„。

BEGIN パターンã—ã‹ç„¡ã„時点ã§ã€ ã‚‚ã¯ã‚„ã€ã“れ㯠awk ã§ã¯ãªã„ã¨ã„ã†ç¯€ã‚‚ç„¡ãã«ã—ã‚‚ã‚らãšã€‚ $1 = "";ãªã©ã€ã‚‚ã¯ã‚„ã€ãƒãƒƒãƒ‰ãƒŽã‚¦ãƒã‚¦ä»¥å¤–ã®ä½•者ã§ã‚‚ãªã—。

ã¨ã“ã‚ã§ã€ç´ ã® awk ã¯ã€æ€ã‚ã¬æ©Ÿèƒ½ãŒãªã‹ã£ãŸã‚Šã—ã¦ãƒãƒžã‚‹ã®ã§ã€ 決ã—ã¦ä½¿ã†ã«ã‚らãšã€‚ よã„å­ã¯ gawk (Linux) ã‹ nawk (Solaris) を使ã„ã¾ã—ょã†ã€‚

Commentã¯æ›¸ã‘ã‚‹ã‘ã©ã€çµ¶æœ›ã—ã¦ãŸã‚‰è¿”ç­”ã§ããªã„ã‹ã‚‚ [URLã¯å…¥åŠ›ä¸å¯!]

夜刀 ã™ã‚ï¼gawkã‚„nawkã«ã¯ARGVå¤‰æ•°ãŒæœ‰ã£ãŸã‚“ã§ã™ã­ã€‚ã†ã†ã€ä»•äº‹ã§æ›¸ã„ãŸã‚¹ã‚¯ãƒªãƒ—トã§ã¯é ‘å¼µã£ã¦FILENAME変数ãŒåˆ‡ã‚Šæ›¿ã‚ã£ãŸã®ã‚’検出ã—ã¦ã¾ã—ãŸã‚ˆã€‚åƒ•ã¯æ‚ªã„å­ã§ã—ãŸã€‚ (2005/07/03 14:14:39)

future ã¡ãªã¿ã«Solaris標準awkã§ãƒãƒžã£ãŸã®ã¯ç§ã ã£ï¼cosãŒå¸¸ã«1ã‚’è¿”ã™ãªã‚“ã¦ã‚ã‹ã‚‹ã‹ã€œï¼ˆã£ã¦å†å¸°è¨ˆç®—ã®ã‚·ãƒŸãƒ¥ãƒ¬ãƒ¼ã‚¿ã‚’awkã§æ›¸ãã“ã¨è‡ªä½“ãŒé–“é•ã£ã¦ã„ã‚‹ã¨è¨€ã†è©±ã‚‚ã‚る)。 (2005/07/03 14:19:32)