関数のawkショートカットを使用して列番号を渡し、出力を印刷したいと思います。私のエイリアスは次のとおりです。
alias A="| awk '{print \$1}'
alias G="| grep -i'
次のように入力する代わりに:
ps -ef | grep mysql | awk 'print $2'
次のように入力できるようにしたいです。
ps -ef G mysql A 2
どんな提案がありますか?
答え1
これは不可能だと思います。デフォルトでは、エイリアスは引数($1
)を受け入れることができず、関数はマクロ拡張(|
)を受け取ることができません。
私が考えることができる最も近いオプションは次のとおりです。
bash
またはzsh
C() { col=$1; shift; eval "awkcmd='{ print \$$col }'"; echo "$awkcmd"; "$@" | awk "$awkcmd"; }
C 2 ps -ef G mysql
存在するzsh
alias -g F="| tr -s '[[:space:]]' | cut -d ' ' -f"
ps -ef G mysql F 2
答え2
パイプをエイリアスに入れるのは厄介です。代わりに、コンテンツをパイプできるシェル関数を作成します。
G () {
grep -i "$@"
}
A () {
awk -v col="$1" '{ print $col }'
}
次に、
ps -ef | G mysql | A 2
ただし、Linuxシステムでは、この特定のパイプは次のものとほぼ同じです。
pgrep mysql