pslaboが試したことの記録

はてなダイヤリーからはてなブログに引っ越してきました

この日記は現在実行中の減量記録を含む個人的なメモとして始めましたが、最近はコンピュータやガジェット、ハック、セキュリティネタのほうがメインになっております。

はてなダイヤリー時代はカテゴリ分けが適当だったのですが、これはそのうち直します。


タブ区切りテキストの第1フィールドに出現するメールアドレスの重複回数を数えるスクリプトをawkで書く

メールアドレスが重複したデータについて、その重複回数を行頭に付与するスクリプトを書いてみました。

重複しない行だけを単純に抜いてもよいのですけど、処理が正しく行われているか否かの検証をしたり、あるいは別の処理にてデータの整理を行いたい場合があります。

そのような場合に重複しない行だけを抜いていると使い勝手が悪いので、あえて重複件数だけを書いています。

このスクリプトの実行結果から重複件数が 1 の行を抜き出せば、重複しないリストが手に入ります。

#!/usr/bin/awk -f
# タブ区切りテキストに記録されたメールアドレス(第1フィールド)が重複した行を捨てる処理

BEGIN {
    # フィールド区切りは tab にする
    FS="\t"
}

{
    # email の出現回数を数える。
    # ここでは email アドレスを添え字とする配列を用いて数えている。
    email_count[$1] = email_count[$1] + 1

    # email の出現回数を行頭に付与する。
    print email_count[$1] "\t" $0
}

Gow とかの awk では標準出力に書けない残念な仕様なので、このような環境で使う場合は print の末尾に > "output.txt" などと書いてファイルに吐き出すとよいでしょう。