2016-02-04

awk Tips

awkについてφ(・ω・ )メモメモ

  1. 標準入力をそのまま標準出力に出力する。  
  2. $ cat foo.txt | awk '{print $0}'  
  3. 標準入力をそのまま標準出力に出力する。  
  4. $ cat foo.txt | awk '1'  
  5. 空行を削除する。  
  6. $ awk '/./' foo.txt  
  7. 空行を削除する。  
  8. $ awk 'NF' foo.txt  
  9. 最初の 10 行を表示する。  
  10. $ awk 'NF >= 10' foo.txt  
  11. 一行ごとに改行を追加する。  
  12. $ awk '1;{print ""}' foo.txt  
  13. 一行ごとに改行を追加する。  
  14. awk 'BEGIN{ORS="\n\n"};1' foo.txt  
  15. ファイルに行番号を付ける。  
  16. $ awk '$0 = NR OFS $0' foo.txt  
  17. ファイルに行番号を付ける。  
  18. $ awk '{print NR "\t" $0}' foo.txt  
  19. ファイル毎に行番号を付ける。  
  20. $ awk '{prin FNR "\t" $0}' foo*.txt  
  21. 行番号を 4 桁で表示させる。  
  22. $ awk '{printf("%4d : %s\n", NR, $0)}' foo.txt  
  23. 最も長い行の長さを表示する。  
  24. $ awk '{if (length($0) > max) max = length($0)} END {print max}' foo.txt  
  25. 80 文字を越える行を表示する。  
  26. $ awk 'length($0) > 80' foo.txt  
  27. 0 から 100 までの間の乱数を 5 つ表示する。  
  28. $ awk 'BEGIN {for (i = 1; i <= 7; i++) print int(101 * rand())}'  
  29. ファイルの行数を数える。  
  30. $ awk 'END {print NR}' foo.txt  
  31. 奇数行を表示する。  
  32. $ awk 'NR % 2 == 1' foo.txt  
  33. 偶数行を表示する。  
  34. $ awk 'NR % 2 == 0' foo.txt  
  35. 最初の 1 行を表示する。  
  36. $ awk 'NR == 1' foo.txt  
  37. 最初の 1 行を表示する。  
  38. $ awk '{print; exit}' foo.txt  
  39. 最後の 1 行を表示する。  
  40. $ awk 'END {print}' foo.txt  
  41. 最後の 1 行を表示する。  
  42. $ awk '{last = $0} END {print last}' foo.txt  
  43. 同一行の削除を行う。(uniq)  
  44. $ awk 'a !~ $0; {a = $0}' foo.txt  
  45. 同一行の削除を行う。(uniq)  
  46. $ awk '{if ($0 != line || NR == 1) print; line = $0}' foo.txt  
  47. 行のソートを行う。(gawk 以上)  
  48. $ gawk '{line[NR] = $0} END {asort(line); for (i = 1; i <= length(line); i++) print line[i]}' foo.txt  
  49. 10 行目から 20 行目までを表示する。  
  50. $ awk 'NR == 10, NR == 20 {print $0}' foo.txt  
  51. 1 から 10 までの数字を生成する。  
  52. $ awk 'BEGIN {for (i == 1; i <= 10; i++) print i}'  
  53. '#' で始まるコメントを削除する。  
  54. $ awk '{sub(/#.*/, "", $0)}1' foo.txt  
  55. さいころを作る。  
  56. $ awk 'BEGIN {srand();print int(rand() * 6 + 1)}'  
  57. ワード数をカウントする。  
  58. $ awk '{n += NF} END {print n}' foo.txt  
  59. 文字数をカウントする。  
  60. $ awk '{n += length($0)} END {print n}' foo.txt  
  61. Load Average を表示する。(Linux のみ)  
  62. $ awk '{print $1}' /proc/loadavg  
  63. yes コマンドを作る。(延々と 'y' を返す)  
  64. $ awk 'BEGIN {for (;;) print "y"}'  
  65. yes コマンドを作る。(延々と 'y' を返す)  
  66. $ awk 'BEGIN {while (awk != "Perl") print "y"}'  
  67. Apache のログにある IP アドレスからホスト名をリアルタイムで引く。(root のみ)  
  68. # tail -f /var/log/httpd/access_log | gawk '{system ("dig -x" $1 " +short")}'  
  69. Apache のログからリンク元をリアルタイムで表示する。(root のみ)  
  70. # tail -f /var/log/httpd/access_log | gawk -F\" '$4!~/gauc/&&$4!="-"{fflush();print $4}'  
  71. CSV (カンマ区切り) から TSV (タブ区切り) への変換を行う。  
  72. $ awk -v FS=',' -v OFS='\t' '$1=$1' foo.txt  
  73. TSV (タブ区切り) から CSV (カンマ区切り) への変換を行う。  
  74. $ awk -v OFS=',' -v FS='\t' '$1=$1' foo.txt  
  75. 各フィールドの和を求める。  
  76. $ awk '{for (i = 1; i <= NF; i++) s += $i} $0=s' foo.txt  
  77. 各行のフィールド数を表示する。  
  78. $ awk '{print NF ":" $0}' foo.txt  
  79. 最後の行のフィールド数を表示する。  
  80. $ awk '{s = NF} END {print NF}' foo.txt  
  81. フィールドが 5 以上の行を表示する。  
  82. $ awk 'NF >= 5' foo.txt  
  83. 改行 CR/LF を LF に変換する。  
  84. $ awk 'sub(/\r$/,"")' foo.txt  
  85. 改行 LF を CR/LF に変換する。  
  86. $ awk 'sub(/$/,"\r")' foo.txt  
  87. 行頭の空白とタブを削除する。  
  88. $ awk '{sub(/^[ \t]+/, "")}1' foo.txt  
  89. 行末の空白とタブを削除する。  
  90. $ awk '{sub(/[ \t]+$/, "")}1' foo.txt  
  91. 行頭と行末の空白とタブを削除する。  
  92. $ awk '{gsub(/^[ \t]+|[ \t]+$/, "")}1' foo.txt  
  93. 行頭と行末の空白とタブを削除する。(フィールドも再構成される)  
  94. $ awk '$1 = $1' foo.txt  
  95. 最後の行から表示する。(tac)  
  96. $ '{a[i++] = $0} END {for (j = i - 1; j >= 0;) print a[j--]}' foo.txt  
  97. 正規表現 abc の行を表示する。(grep)  
  98. $ awk '/abc/' foo.txt  
  99. 正規表現 abc にマッチしない行を表示する。(grep -v)  
  100. $ awk '! /abc/' foo.txt  
  101. Pattern にマッチした前の行を表示する。  
  102. $ awk '/Pattern/ {print a} {a=$0}' foo.txt  
  103. Pattern にマッチした前の行を表示する。  
  104. $ awk '{D[NR] = $0} /match/ {print D[NR-1]}' foo.txt  
  105. ファイルサイズが 0 byte のものを表示する。  
  106. $ ls -al | awk '$5==0 {print $8}'  
  107. Subversion の svn status で '?' の付くファイルを全て svn add する。  
  108. $ svn status | gawk '/^?/{print $2}' | xargs svn add  

0 件のコメント:

コメントを投稿