awk 函数,带有要打印的列的数字参数

awk 函数,带有要打印的列的数字参数

我想使用 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),函数不能进行宏扩展 ( |)。

我能想到的最接近的选择:

bashzsh

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

将管道放入别名中很尴尬。相反,创建一个可以通过管道将内容传递到的 shell 函数:

G () {
    grep -i "$@"
}

A () {
    awk -v col="$1" '{ print $col }'
}

然后,

ps -ef | G mysql | A 2

但在 Linux 系统上,这个特定的管道或多或少与

pgrep mysql

相关内容