標準入力をそのまま標準出力に出力する。 $ cat foo.txt | awk '{print $0}' 標準入力をそのまま標準出力に出力する。 $ cat foo.txt | awk '1' 空行を削除する。 $ awk '/./' foo.txt 空行を削除する。 $ awk 'NF' foo.txt 最初の 10 行を表示する。 $ awk 'NF >= 10' foo.txt 一行ごとに改行を追加する。 $ awk '1;{print ""}' foo.txt 一行ごとに改行を追加する。 awk 'BEGIN{ORS="\n\n"};1' foo.txt ファイルに行番号を付ける。 $ awk '$0 = NR OFS $0' foo.txt ファイルに行番号を付ける。 $ awk '{print NR "\t" $0}' foo.txt ファイル毎に行番号を付ける。 $ awk '{prin FNR "\t" $0}' foo*.txt 行番号を 4 桁で表示させる。 $ awk '{printf("%4d : %s\n", NR, $0)}' foo.txt 最も長い行の長さを表示する。 $ awk '{if (length($0) > max) max = length($0)} END {print max}' foo.txt 80 文字を越える行を表示する。 $ awk 'length($0) > 80' foo.txt 0 から 100 までの間の乱数を 5 つ表示する。 $ awk 'BEGIN {for (i = 1; i <= 7; i++) print int(101 * rand())}' ファイルの行数を数える。 $ awk 'END {print NR}' foo.txt 奇数行を表示する。 $ awk 'NR % 2 == 1' foo.txt 偶数行を表示する。 $ awk 'NR % 2 == 0' foo.txt 最初の 1 行を表示する。 $ awk 'NR == 1' foo.txt 最初の 1 行を表示する。 $ awk '{print; exit}' foo.txt 最後の 1 行を表示する。 $ awk 'END {print}' foo.txt 最後の 1 行を表示する。 $ awk '{last = $0} END {print last}' foo.txt 同一行の削除を行う。(uniq) $ awk 'a !~ $0; {a = $0}' foo.txt 同一行の削除を行う。(uniq) $ awk '{if ($0 != line || NR == 1) print; line = $0}' foo.txt 行のソートを行う。(gawk 以上) $ gawk '{line[NR] = $0} END {asort(line); for (i = 1; i <= length(line); i++) print line[i]}' foo.txt 10 行目から 20 行目までを表示する。 $ awk 'NR == 10, NR == 20 {print $0}' foo.txt 1 から 10 までの数字を生成する。 $ awk 'BEGIN {for (i == 1; i <= 10; i++) print i}' '#' で始まるコメントを削除する。 $ awk '{sub(/#.*/, "", $0)}1' foo.txt さいころを作る。 $ awk 'BEGIN {srand();print int(rand() * 6 + 1)}' ワード数をカウントする。 $ awk '{n += NF} END {print n}' foo.txt 文字数をカウントする。 $ awk '{n += length($0)} END {print n}' foo.txt Load Average を表示する。(Linux のみ) $ awk '{print $1}' /proc/loadavg yes コマンドを作る。(延々と 'y' を返す) $ awk 'BEGIN {for (;;) print "y"}' yes コマンドを作る。(延々と 'y' を返す) $ awk 'BEGIN {while (awk != "Perl") print "y"}' Apache のログにある IP アドレスからホスト名をリアルタイムで引く。(root のみ) # tail -f /var/log/httpd/access_log | gawk '{system ("dig -x" $1 " +short")}' Apache のログからリンク元をリアルタイムで表示する。(root のみ) # tail -f /var/log/httpd/access_log | gawk -F\" '$4!~/gauc/&&$4!="-"{fflush();print $4}' CSV (カンマ区切り) から TSV (タブ区切り) への変換を行う。 $ awk -v FS=',' -v OFS='\t' '$1=$1' foo.txt TSV (タブ区切り) から CSV (カンマ区切り) への変換を行う。 $ awk -v OFS=',' -v FS='\t' '$1=$1' foo.txt 各フィールドの和を求める。 $ awk '{for (i = 1; i <= NF; i++) s += $i} $0=s' foo.txt 各行のフィールド数を表示する。 $ awk '{print NF ":" $0}' foo.txt 最後の行のフィールド数を表示する。 $ awk '{s = NF} END {print NF}' foo.txt フィールドが 5 以上の行を表示する。 $ awk 'NF >= 5' foo.txt 改行 CR/LF を LF に変換する。 $ awk 'sub(/\r$/,"")' foo.txt 改行 LF を CR/LF に変換する。 $ awk 'sub(/$/,"\r")' foo.txt 行頭の空白とタブを削除する。 $ awk '{sub(/^[ \t]+/, "")}1' foo.txt 行末の空白とタブを削除する。 $ awk '{sub(/[ \t]+$/, "")}1' foo.txt 行頭と行末の空白とタブを削除する。 $ awk '{gsub(/^[ \t]+|[ \t]+$/, "")}1' foo.txt 行頭と行末の空白とタブを削除する。(フィールドも再構成される) $ awk '$1 = $1' foo.txt 最後の行から表示する。(tac) $ '{a[i++] = $0} END {for (j = i - 1; j >= 0;) print a[j--]}' foo.txt 正規表現 abc の行を表示する。(grep) $ awk '/abc/' foo.txt 正規表現 abc にマッチしない行を表示する。(grep -v) $ awk '! /abc/' foo.txt Pattern にマッチした前の行を表示する。 $ awk '/Pattern/ {print a} {a=$0}' foo.txt Pattern にマッチした前の行を表示する。 $ awk '{D[NR] = $0} /match/ {print D[NR-1]}' foo.txt ファイルサイズが 0 byte のものを表示する。 $ ls -al | awk '$5==0 {print $8}' Subversion の svn status で '?' の付くファイルを全て svn add する。 $ svn status | gawk '/^?/{print $2}' | xargs svn add
2016-02-04
awk Tips
awkについてφ(・ω・ )メモメモ
登録:
コメントの投稿 (Atom)
0 件のコメント:
コメントを投稿