MAN HIMAZINE INTERFACE 3.1
ã“ã®ã€Œã«ã£ãã€ã«ã¯æš´åŠ›ã‚·ãƒ¼ãƒ³ã‚„ã‚°ãƒãƒ†ã‚¹ã‚¯ãªè¡¨ç¾ãŒå«ã¾ã‚Œã¦ã„ã¾ã™ã€‚
- æ¥å‹™é€£çµ¡
- ZXH ã§å§‹ã¾ã‚‹ãƒ¡ãƒ¼ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹ã¯ SPAM ãŒå¤šã„ãŸã‚ã€å»ƒæ¢ã—ã¾ã—ãŸã€‚ ã”連絡㯠iyahaya ã§å§‹ã¾ã‚‹æ–¹ã®ãƒ¡ãƒ¼ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹ã‹ã€ ã‚ã‚‹ã„㯠twitter ã® @zetamatta ã¸ãŠé¡˜ã„致ã—ã¾ã™ã€‚
(2005.07.03)
$ [oldtype] 番組ã®é€”ä¸ã§ã™ãŒã€æŒ‘戦状ã«ã¯ç”ãˆãã°ãªã‚‹ã¾ã„ï¼ ![[B!]](http://nyaos.org/d/index.cgi?a=b_entry)
Tweet
複数ã®ãƒ•ァイルを一行ãšã¤èªã¿å‡ºã—ã¦å‡¦ç†ã—ãŸã„時ã«ã€ ã©ã†ã—ã¦ã‚‚変数ãªã‚Šé…åˆ—ã«æ ¼ç´ã—㦠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!]](http://nyaos.org/d/index.cgi?a=b_entry)
Tweet
実ã¯é€”ä¸ã§æ°—付ã„ã¦ã¯ã„ãŸã‚“ã ã‘れã©ã‚‚〠二ã¤ã®å¼•æ•°ã—ã‹å–れãªã„ã®ã¯ 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) を使ã„ã¾ã—ょã†ã€‚

夜刀 ã™ã‚ï¼gawkã‚„nawkã«ã¯ARGVå¤‰æ•°ãŒæœ‰ã£ãŸã‚“ã§ã™ã。ã†ã†ã€ä»•äº‹ã§æ›¸ã„ãŸã‚¹ã‚¯ãƒªãƒ—トã§ã¯é ‘å¼µã£ã¦FILENAME変数ãŒåˆ‡ã‚Šæ›¿ã‚ã£ãŸã®ã‚’検出ã—ã¦ã¾ã—ãŸã‚ˆã€‚åƒ•ã¯æ‚ªã„åã§ã—ãŸã€‚ (2005/07/03 14:14:39)
future ã¡ãªã¿ã«Solaris標準awkã§ãƒãƒžã£ãŸã®ã¯ç§ã ã£ï¼cosãŒå¸¸ã«1ã‚’è¿”ã™ãªã‚“ã¦ã‚ã‹ã‚‹ã‹ã€œï¼ˆã£ã¦å†å¸°è¨ˆç®—ã®ã‚·ãƒŸãƒ¥ãƒ¬ãƒ¼ã‚¿ã‚’awkã§æ›¸ãã“ã¨è‡ªä½“ãŒé–“é•ã£ã¦ã„ã‚‹ã¨è¨€ã†è©±ã‚‚ã‚る)。 (2005/07/03 14:19:32)