awk

差分

このページの2つのバージョン間の差分を表示します。

この比較画面へのリンク

両方とも前のリビジョン 前のリビジョン
次のリビジョン
前のリビジョン
awk [2016/05/18 13:47] – [よく使う関数] mumeiyamibitoawk [2018/03/13 16:46] (現在) – [シェル変数をパターンとして引き渡す] mumeiyamibito
行 67: 行 67:
   * 定義は不要   * 定義は不要
   * 配列のインデックスは 1 から始まる (0 ではない)   * 配列のインデックスは 1 から始まる (0 ではない)
-==== その他 ==== + 
-  * 改行 +==== 演算子 ==== 
-    * 複数行を1行にしたい(ライナー)場合、「;」が改行代わりになる+  * 演算 
 +    * 四則演算が使える 
 +      * +, -, *, / 
 +    * インクリメンタル (++) やデクリメト (--が使える 
 +    * 代入演算子 (+= や -= など) が使える 
 + 
 +==== if ==== 
 +  * 条件を分岐する場合\\ <code> 
 +if (条件1){ 
 + 処理1 
 +else if (条件2){ 
 + 処理2 
 +
 +else{ 
 + 処理3 
 +}</code> 
 +  * 例:\\ <code> 
 +if (i == 0){ 
 + print "0" 
 +
 +else if (0 < i && i < 10){ 
 + print "1-9" 
 +
 +else{ 
 + print "10 over" 
 +
 +</code> 
 +  * 条件式で使える記号 
 +    * <, >, <=, =>, == (数値文字列比較使う), != 
 +    * &&, || 
 +    * 正規表現では ~ で正規表現とつる (例: i ~ /hoge/) 
 + 
 + 
 +==== for ==== 
 +  * 繰り返し処理をする場合に使う\\ <code> 
 +for (変数の初期化; 変数の条件式; 変数の変化){ 
 + 処理 
 +
 +</code> 
 +    * C 言語の for 文と一緒 
 +  * 例\\ <code> 
 +for (i = 0; i < 3; i ++){ 
 + print "Hello" 
 +
 +</code>Hello を 3 回出力
  
 ==== よく使う関数 ==== ==== よく使う関数 ====
行 89: 行 133:
   * split\\ <code>split(対象文字列, 配列, 区切り文字)</code>   * split\\ <code>split(対象文字列, 配列, 区切り文字)</code>
     * **対象文字列** を **区切り文字** で区切って、**配列** に代入する関数     * **対象文字列** を **区切り文字** で区切って、**配列** に代入する関数
-    * 返り値は、配列の要素数になる\\ <code>hoge = split("banana", data, "a")</code>\\ hoge は 3、data には「b」「n」「n」が入る+    * 返り値は、配列の要素数になる\\ <code>hoge = split("banana", data, "a")</code>hoge は 3、data には「b」「n」「n」が入る
   * length\\ <code>length(配列)</code>   * length\\ <code>length(配列)</code>
     * 文字列や配列の長さを出力     * 文字列や配列の長さを出力
  
-==== 演算子 ==== +==== その他 ==== 
-  * 演算 +  * 改行 
-    * 四則演算が使える +    * 複数行を1行にしたい(ライナー)場合、「;改行のわりになる
-      * +, -, *, / +
-    * インクリメンタル (++) やデクリメト (--) が使える +
-    * 入演算子 (+= や -= ど) が使え+
  
 ===== awk プログラムの例 ===== ===== awk プログラムの例 =====
行 130: 行 171:
 $ awk 'BEGIN{total = 0; count = 0} $0!~/^#/{total += $2; count ++} END{average = total / count; print "Total: " total; print "Average: " average}' $ awk 'BEGIN{total = 0; count = 0} $0!~/^#/{total += $2; count ++} END{average = total / count; print "Total: " total; print "Average: " average}'
 </code> </code>
 +
 +===== Tips =====
 +==== シェル変数をパターンとして引き渡す ====
 +  * ''-v'' オプションで変数を渡しつつ、''$0 ~ VAR'' でマッチさせる\\ <code bash>$ awk -v VAR '$0 ~ VAR{print $0}' FILE</code>
 +    * ''VAR'' は変数名
 +    * ''FILE'' は処理するファイル名
 +  * 参考サイト: [[https://stackoverflow.com/questions/39384283/how-to-match-a-pattern-given-in-a-variable-in-awk | regex - How to match a pattern given in a variable in awk? - Stack Overflow]]
 +
  
 ===== 参考サイト ===== ===== 参考サイト =====
行 136: 行 185:
   * [[http://www.techscore.com/blog/2012/11/19/%E3%81%82%E3%81%88%E3%81%A6%E8%A8%80%E3%81%86%E3%81%BB%E3%81%A9%E3%81%A7%E3%81%AF%E3%81%AA%E3%81%84%E3%81%91%E3%82%8C%E3%81%A9%E3%82%82%E3%80%81awk%E3%81%AE%E5%8C%BA%E5%88%87%E3%82%8A%E6%96%87/ | » あえて言うほどではないけれども、awkの区切り文字について TECHSCORE BLOG]] 区切り文字   * [[http://www.techscore.com/blog/2012/11/19/%E3%81%82%E3%81%88%E3%81%A6%E8%A8%80%E3%81%86%E3%81%BB%E3%81%A9%E3%81%A7%E3%81%AF%E3%81%AA%E3%81%84%E3%81%91%E3%82%8C%E3%81%A9%E3%82%82%E3%80%81awk%E3%81%AE%E5%8C%BA%E5%88%87%E3%82%8A%E6%96%87/ | » あえて言うほどではないけれども、awkの区切り文字について TECHSCORE BLOG]] 区切り文字
   * [[http://itdoc.hitachi.co.jp/manuals/3020/30203S3530/JPAS0241.HTM | awkコマンド(テキストの加工やパターン処理をする)]]   * [[http://itdoc.hitachi.co.jp/manuals/3020/30203S3530/JPAS0241.HTM | awkコマンド(テキストの加工やパターン処理をする)]]
 +  * [[http://shellscript.sunone.me/awk.html | AWK リファレンス | UNIX & Linux コマンド・シェルスクリプト リファレンス]]
  
 +{{tag>プログラミング コマンド}}
  • awk.1463546838.txt.gz
  • 最終更新: 2016/05/18 13:47
  • by mumeiyamibito