awkæ´ä¸æ¥ã®åå¿è ãèªãawkç解ã®ãã¤ã³ã
ä»ã¾ã§ããã¹ãå¦çãªã©ã§ã¯ã³ã©ã¤ãã¼ã使ãã¨ãã¯perlã使ã£ã¦ããï¼Perlãå ã«è¦ãã身ã¨ãã¦ã¯awkãsedã¯éå»ã®ç£ç©ã ã¨æãè¾¼ãã§ããï¼awkã®æ¹ãç°¡æ½ã«æ¸ããã±ã¼ã¹ã«åºãããããã¨ããã£ããã«awkãåå¼·ãã¦ã¿ããåãªé£ããå«ãã ã£ããã¨ã«æ°ãä»ããã®ã§ãã¤ã³ããã¾ã¨ãã¦ã¿ãï¼
ãªãããã°ã©ãã³ã°è¨èªã¨ãã¦ã¯AWKã¨ãã表è¨ãæ£ãã (Aho, Weinberger, Kernighanã®é æå! ã¨ãããã¨ã ãã¯ä»¥åããç¥ã£ã¦ãã)ï¼ãªãªã¸ãã«å¦çç³»ã®ãã¨ãawkã¨å¼ã¶ã®ã ããããã©ï¼ä»åã¯å¦çç³»ã®éãã¯æ°ã«ããªãã®ã§awk, nawk, gawkã®éãã¯æ°ã«ããªããã¨ã«ããï¼ã¦ããã詳ããç¥ããªãï¼
ãawkã£ã¦ãªãã?ãã¨ããæ¹ã対象èªè ï¼ã¹ã¯ãªããè¨èªã¨æ£è¦è¡¨ç¾ã®åºç¤ç¥èãå°ãã§ãããã°ï¼ãã¶ãããã«ä½¿ããããã«ãªãã¨æãï¼awkãä¸åº¦ã§ã使ã£ããã¨ããã人ã«ã¯æ°ããæ å ±ã¯ã»ã¨ãã©ãªãã¨æãï¼
å¸°å® ãã¦ãããã£ã¨æ¬æ£ã®è¥ããã«ãªã£ã¦ããsed & awkããã°ã©ãã³ã° æ¹è¨ç (A nutshell handbook)ãèªãã§ãã¦
å ¥åãã¼ã¿ã®ããããªè¡ãã«å¯¾ãã¦ï¼ããããªå¦çããããªããã¨ããæç¶ããæ¸ãè¡æåã®ããã°ã©ãã³ã°è¨èª
ã¨ããã¤ã¡ã¼ã¸ã沸ããç¬éï¼awkã好ãã«ãªããæ°ãããï¼
æ´ã«ä»ãå ããã¨å ¥åãã¼ã¿ã¯åºåãæå (ããã©ã«ãã¯ç©ºç½ï¼å¤æ´å¯è½) ã§åºåããã¦ãããã¨ãæ³å®ãã¦ããã®ã§
åè¡ã¯åºåãæåã§åå²ãã¦å¤æ°($1, $2, ...) ã«æ ¼ç´ãã¦ããã¦ããã
ã¨ããç¹ãã¨ã¦ã便å©ï¼Perlã ã¨ã¤ãã¤ãsplitããªããã°ãªããªãã®ã§ï¼(å®ã¯ãããªãã¨ãªãã®ã®ã ãã©å¾è¿°)
awkã®ã³ã¼ãã¯ä»¥ä¸ã®3é¨åã«åãããï¼
BEGIN { åå¦ç } æ¡ä»¶é¨ { å¦ç } END { å¾å¦ç }
ã¡ã¤ã³ãããã¯ã¯è¤æ°ãã£ã¦ããã
BEGIN { åå¦ç } æ¡ä»¶é¨ { å¦ç } æ¡ä»¶é¨ { å¦ç } æ¡ä»¶é¨ { å¦ç } ... END { å¾å¦ç }
æ¥æ¬èªã§èªã¿ãããã¨ï¼ãããªã¤ã¡ã¼ã¸
BEGIN { æåã«ãããªãã¨ãã } ãããªã¬ã³ã¼ãã« { ãããªãã¨ãã } ãããªã¬ã³ã¼ãã« { ãããªãã¨ãã } ãããªã¬ã³ã¼ãã« { ãããªãã¨ãã } END { æå¾ã«ãããªãã¨ãã }
ã¯ã³ã©ã¤ãã¼ã§æ¸ãã¨ãã¯ãããªæãã«ãªãï¼
% awk 'BEGIN{ åå¦ç } æ¡ä»¶é¨ { å¦ç } END{ å¾å¦ç }'
å ¥åãã¼ã¿ã¯ãã¡ã¤ã«åãæå®ãã¦ããããï¼æ¨æºå ¥åããä¸ãã¦ãããï¼
è¦ã¦ã®ã¨ããï¼BEGINãããã¯ã¯ããã°ã©ã éå§æã«ä¸åº¦ã ãå®è¡ããï¼ENDãããã¯ã¯ããã°ã©ã çµäºæã«ä¸åº¦ã ãå®è¡ãããï¼ããããå¤æ°ã®åæåã¨çµæã®è¨ç®ãåºåãªã©ã«å©ç¨ãããããï¼
åã¬ã³ã¼ãã®èª¿çæ¹æ³ã¯çãä¸ã®æ¡ä»¶é¨ã¨ãã®å¦çï¼å ¥åãããããã¹ãã®åã¬ã³ã¼ã (ããã©ã«ãã§ã¯ã¬ã³ã¼ãåºåãã¯æ¹è¡ãªã®ã§ï¼åè¡) ã«ã¤ãã¦æ¡ä»¶é¨{ å¦ç } ãé次é©ç¨ããã¤ã¡ã¼ã¸ï¼
ãªãï¼æ¡ä»¶é¨ã¨å¦çã¯è¤æ°è¨è¿°ãã¦ãããï¼è¤æ°æ¡ä»¶é¨ãè¨è¿°ãããå ´åã¯ï¼1ã¬ã³ã¼ãã«ã¤ãã¦å ¨ã¦ã®æ¡ä»¶é¨ã®ãã§ãã¯ãããã®ã§ï¼Perlã§ããã¨ããã® if {} elsif {} elsif ... ã§ã¯ãªãï¼if {} if {} if {}ï¼
ãã¾è¨èã§èª¬æãããã¨ãå³ã«ããã¨ãããªæãï¼å ¥åãã¼ã¿ã®åè¡ã«å¯¾ãã¦ã¡ã¤ã³ãããã¯ãé次é©ç¨ããã¦ããã¤ã¡ã¼ã¸ãã¤ããã¨æãï¼
ååï¼èº«é·ï¼ä½éãè¨è¿°ããã¦ãããã¼ã¿ã«å¯¾ãã¦ï¼èº«é·ã170ãã大ãã人ã®ä½éã®å¹³åï¼160ãã大ãã人ã®ä½éã®å¹³åãè¨ç®ããawkã¯ã³ã©ã¤ãã¼ã®ä¾ï¼
以éï¼ã¯ã³ã©ã¤ãã¼ã®ä¾ãããã¤ãç´¹ä»ããï¼ãã®æ¡ä»¶é¨ã®è¨æ³ãããªã便å©ï¼ãã使ãæ¡ä»¶é¨ã®æå®æ¹æ³ã¨ãã¦æ£è¦è¡¨ç¾ãããï¼
# å é ã1ã®è¡ã表示 % awk '/^1/ {print}' hoge.txt
ãªãï¼æ¡ä»¶é¨ã¨å¦çã¯è¤æ°è¨è¿°ãã¦ãããï¼
% awk '/^1/ {a++} /^2/ {b++} END{print a; print b;}' hoge.txt
ãã®å ´åï¼å é ã1ã§å§ã¾ãè¡ã¨2ã§å§ã¾ãè¡ã®æ°ãããããa, bã¨ããå¤æ°ã«æ ¼ç´ãï¼æå¾ã«åºåãã¦ããï¼Perl使ããawkã使ãå§ããã¨å¤æ°ã®ã¯ããã«$è¨å·ãã¤ãã¦ãã¾ããã¡ã ããã©ï¼$ã§å§ã¾ãã®ã¯ãã£ã¼ã«ãå¤æ°ã ãï¼ä»ã¯$ãä»ããªãã®ã§æ³¨æï¼
æ¡ä»¶é¨ã®æå®ã¯ï¼æ£è¦è¡¨ç¾ä»¥å¤ãå©ç¨ãããã¨ãã§ããï¼ãã¨ãã°ã«ã³ãåºåãã®CSVãã¼ã¿ãå ¥åã¨ãã¦åãåãï¼2çªç®ã®ã«ã©ã ã100以ä¸ã®è¡æ°ãæ°ãããã¨ããï¼ãããªæãã§æ¸ããï¼
% awk -F, '$2>100 {count++} END{print count}' hoge.txt
ããã§ã¯-Fãªãã·ã§ã³ã§åºåãæåãæå®ãã¦ããï¼countå¤æ°ã¯BEGINãããã¯ã§åæåãã¦ãããããã©ï¼ããã©ã«ãåæå¤ã¯0ã®ãããªã®ã§çç¥ãã¦ããï¼
ãã®ä»ã«ã¯ï¼ä¾ãã°å¿ ã3è¡ãã¤åºåããããã°ã©ã ãæ¨æºåºåã«ã²ãããçµæãåºåãããããªå ´åï¼ãã¤ï¼ãã®ãã¡1è¡ç®ã®ã¿ãå¿ è¦ãªå ´åï¼å ¥åãã¼ã¿ã3è¡ããã«å¦çããå¿ è¦ããã
ãã®å ´åã¯ï¼
% awk 'NR % 3 == 0 { print }' hoge.txt
ã¨ããããã«æ¡ä»¶é¨ãè¨è¿°ãããã¨ãã§ããï¼ããã§NRã¯ç¾å¨å¦çãã¦ããè¡çªå·ã®ãã¨ï¼
ãã使ãçµã¿è¾¼ã¿å¤æ°
- NR: å¦ç対象ã®è¡çªå·
- NF: å¦ç対象ã®ãã£ã¼ã«ãæ°
- FS: åºåãæå (-Fãªãã·ã§ã³ã§ãæå®å¯è½)
ãªã©ãããï¼ç¹ã«ãã¼ã¿ã«ãã£ã¦ã«ã³ãåºåãã ã£ããï¼ã¿ãåºåãã ã£ããç°ãªãã®ã§ï¼åºåãæåã®æå®ã¯è¦ãã¦ããã¨ä¾¿å©ãããããªãï¼
æ¬è¨äºã¯awk解説ãç®çã§ã¯ãªãã®ã§ï¼è©³ããawkã®ä½¿ãæ¹ã«ã¤ãã¦ã¯ï¼æå¾ã®ãªã³ã¯éãåèã®ãã¨
ãã¤ã³ãã®ã¾ã¨ã
åå¿è ã¯ä»¥ä¸ã®3ç¹ãç解ããã¨ï¼awkã使ããããã«ãªã (æ°ããã)
- awkã¯è¡æåã®ããã°ã©ãã³ã°è¨èª
- å¦ç対象ã®è¡ãæ¡ä»¶é¨ã§æå®ãã¦ï¼ãã®è¡ã«å¯¾ããå¦çãè¨è¿°ãã
- åå¦çãå¾å¦çããããå ´åã¯é©å®BEGINãããã¯, ENDãããã¯ãå©ç¨ãã
ã? ããPerlã§ã§ããã?
ããã¾ã§æ¸ãã¦ããã¦ã¢ã¬ãªæãã ããã©åããããªæ¸ãæ¹ã¯Perlã§ãã§ãããããï¼ã¯ã³ã©ã¤ãã¼ã®-eãªãã·ã§ã³ã«å ãã¦ï¼åè¡ãå¦çãã-nãªãã·ã§ã³ï¼awkã®$1, $2ç¸å½ã®ãã¨ãè¡ã-aãªãã·ã§ã³ã使ãã°ã»ã¼awkã®æè¦ã§æ¸ãã
ãããããªã³ã¯é
- awk基礎文法最速マスター
- ããã£ã¨åºæ¬ããããã
- AWKの第一歩 (PDF)
- ããã®2ç« ,5ç« ãããã£ã¨èªãã°ããã¦ãã®ãã¨ã¯ã§ããããã«ãªãã¯ã
- awk sed 入門
- çµã¿è¾¼ã¿å¤æ°ï¼é¢æ°ä¸è¦§
- プログラミング言語awk
- ãã¡ãã1ãã¼ã¸ã§ç°¡æ½ã«ã¾ã¨ãã£ã¦ãã
- AWKならどう書く?
- awkã®ã¯ãã¯ããã¯ç¸å½?
- 文系のためのawkプログラミング入門
- èªã¿ç©çã«
- AWKのススメ - クックパッド開発者ブログ
- å®ä¾ãç´¹ä»
- 実例でわかるAWK 第1回
æ¸ç±ã§ããã°ï¼ããããããã (ã¨ãããããããç¥ããªã)
sed & awkããã°ã©ãã³ã° æ¹è¨ç (A nutshell handbook)
- ä½è : Dale Dougherty,Arnold Robbins,ç¦å´ä¿å
- åºç社/ã¡ã¼ã«ã¼: ãªã©ã¤ãªã¼ã»ã¸ã£ãã³
- çºå£²æ¥: 1997/10/01
- ã¡ãã£ã¢: 大åæ¬
- è³¼å ¥: 2人 ã¯ãªãã¯: 48å
- ãã®ååãå«ãããã° (34件) ãè¦ã
次ã¯sedã使ããããã«ãªããããªãï¼