Let's write β

プログラミング中にできたことか、思ったこととか

特定のフィールドが正規表現にマッチする行を表示

特定の行の中に特定の文字列がマッチするというパターンは普通にgrepをするという事で解決できますし、特定のフィールドに文字がふくまれるというのはそのマッチする文字列の部分だけで良いならawkで抽出してからというものができます。
しかし、特定のフィールドが特定の正規表現にマッチするときにその行全体を表示するというのはちょっと面倒です。awkで処理すれば簡単にできますが、しかし、毎回そのようなものを書くのは骨がおれます。
そこで、一つのシェルスクリプトにしてみました

#!/bin/sh
if [ $# -gt 1 ];then
        while getopts n: OPT
        do
                case $OPT in
                        "n" ) FLG_N="TRUE"; VALUE_N="$OPTARG";
                esac
        done
        shift `expr $OPTIND - 1`
        if [ "$FLG_N" = "TRUE" ]; then
                awk \
                        '{
                if($'$VALUE_N'~/'$1'/)
                        print
                }' $2
        else
                grep $1 $2
        fi
else
        echo "Usage: awgrep [-n field] PATTERN [FILE]"
fi

こんな感じ

$cat sample.txt
a write
b	moge
c	hoge
d	ahoge
$./awgrep.sh 'oge' sample.txt
b	moge
c	hoge
d	ahoge
$./awgrep.sh -n 2 '^.oge' sample.txt
b	moge
c	hoge
$cat sample.txt |  ./awgrep.sh -n 2 '^.oge'
b	moge
c	hoge

こんな感じですかね?ちょっと実装に不安はのこりますが..