カテゴリー
コンピューター

【Git BASH】追加したコメントを除くステップ数を数える方法

やりたいこと

  • Git のコミット間の実行ステップ数を調べたい。
    • 追加行をカウントしたい。
    • 削除行はカウントしたくない。
    • コメント行はカウントしたくない。

環境

  • Windows 7 Professional 32 bit
  • Git BASH

カウントするコード

  • git diff: 修正箇所で最終的に残っている実行行をカウントする。
  • awk: カウントする行を抽出する。
    • ^+: + で始まる行を残す。
    • 次の条件に当てはまる行を除外する。
    • ^---a: — a で始まる行
    • ^+++ b: +++ b で始まる行
    • ^(+|-)$: + または – のみの行
    • ^(+|-)(¥t| )*(<%|¥/|¥*): + または – で始まり、0 個以上のタブまたはスペースがあり、続いて <% または / または * のある行

実際のコードは次のようになりました。

# ステップ数カウント
# 修正箇所で最終的に残っている実行行をカウントする。

# 差分を全てそのまま取得
git diff before after > step-all .txt
# カウントする行のみを抽出
awk  '/^+/ && (!/^---a/ && !/^+++ b/ && (!/^(+|-)(¥t| )*(<%|¥/|¥*)/) && !/^(+|-)$/) { print $0 }' step-all.txt > step-edited.txt
# ステップ数を出力
wc -l step-edited.txt

# ワンライナー
git diff before after  | awk '/^+/ && (!/^---a/ && !/^+++ b/ && (!/^(+|-)(¥t| )*(<%|¥/|¥*)/) && !/^(+|-)$/) { print $0 }' | wc -l

おわりに

参考ページです。ありがとうございます!

  • Regexper
  • [svn 差分 ステップ数] で検索
  • [git 差分 ステップ数] で検索

以上です。

カテゴリー
Microsoft

Windows で Subversion ログからファイルのリストを作り、そのファイルを引数にグレップした時のポイントメモ

やりたいこと

  • Subversion のログから、更新したファイルのパスのリストを取得
  • 各パスのファイルを対象に、指定文字列でグレップ

使ったコマンド

  • svn diff: 更新したファイルのパスのリストを取得するのに
  • grep: パスのリストから拡張子でフィルタリングするのに、指定文字列でグラップするのに
  • sed: 最終行を削除するのに使用
  • awk: 指定列のみ抽出するのに、置換するのに
  • xargs: 出力したパスの1行を1引数として次のコマンドに渡すのに
カテゴリー
Linux

【シェル芸人】10000 までの素数を出力するコマンド【Linux】

はじめに

面接官「ほう。得意な言語はPerlですか」 学生「はい!」 面接官「では、10000までの素数を出力してください」 学生「system “seq 2 10000 | factor | awk ‘NF == 2’ | cut -d: -f1″」 面接官「げぇっ シェル芸人」

まあ!素敵!

あら?Perl でと出題されていますのに、シェルで解答なさっていらっしゃるようですわね。それで、面接官が「げぇっ」となってしまいましたのね!面白いですわ♪

さて、今回はこのシェル部分に注目し、各コマンドについて調べることでシェルに対する理解を深める、勉強をしたいと存じます♪

10000 までの素数を出力するシェル

seq 2 10000 | factor | awk 'NF==2{print $2}'

最初に引用したツイートのシェル部分から最後の部分のみ変更しています。いろいろ調べていましたら、「cut」コマンドは「awk」コマンドを工夫することで省略できましたから。

さて、具体的に出力を確認しながら各コマンドを勉強してまいりましょう。その際、10000 までですと出力が多すぎますので、10 までの数で考えます。

カテゴリー
Linux

【Linux】瞬間アクセス数ランキング!解析コマンド「cat access_log | awk ‘{ print $4 }’ | sort | uniq -c | sort -r | less」

瞬間アクセス数ランキングを出すコマンド

# access_log を解析して瞬間アクセスランキングを出力
cat access_log | awk '{ print $4 }' | sort  | uniq -c | sort -r | less

ひとつひとつ分解して解説してみます!