{print $1}しか知らない自分のためのAWKメモ
awkのことをきちんと知っておこうと思って、下記を読ませていただいたときのメモ書きです。
http://antibayesian.hateblo.jp/entry/2014/09/15/162605
条件マッチする行を抽出
# 10にマッチする行を抽出する。 awk /10/ trees.txt # 両方の条件を満たす行を抽出する。 awk "/10/ && /16/" trees.txt # 片方どちらかでも条件を満たした行を抽出 awk "/10/ || /16/" trees.txt # 10を含まない行を抽出 awk !/10/ trees.txt # 1列目に10が含まれる行を抽出 # ※$0には行全体が入っている awk $1~/10/ trees.txt # 1行目が10未満の行を抽出 awk "$1<10" trees.txt # 12~14間の数値が含まれる行を抽出 awk /12/,/14/ trees.txt
組み込み変数を使って抽出
組み込み変数
NR # 現在読み込んでいる行数 NF # 現在読み込んでいる行の列数 -F # ファイルセパレータ指定。デフォルトは半角スペースかタブ。,を指定することでCSVファイルに対応 length # 現在読み込んでいる行の文字数 # CSVファイルから取り出す awk -F , $1~/10/ trees.txt # 1~3行目を取り出す awk "NR<=3" trees.txt # 列数が2未満の行を取り出す awk "NF<2 {print NR, $0}" trees.txt # 空行以外を取り出す awk "length>0" trees.txt
printを使ったデータ加工
# 1列目だけ awk "{print $1}" trees.txt # 1列目*2列目の計算結果を出力 # ※文字列での計算は0になる awk "{print $0,$1*$2}" trees.txt # 行数付与 awk "{print NR, $0}" trees.txt # $0に含まれる8をxxxに置換して出力 awk "{gsub(8,\"xxx\",$0);print $0}" trees.txt