読者です 読者をやめる 読者になる 読者になる

Let's write β

趣味で書いたこととか、RustとLispが好き

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

特定の行の中に特定の文字列がマッチするというパターンは普通に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

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

僕が働いているAzit.incでは一緒に働けるエンジニアを募集しています!
採用情報 — 株式会社アジット|Azit Inc.