인쇄할 열에 대한 숫자 인수가 있는 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

파이프를 별칭에 넣는 것은 어색합니다. 대신 콘텐츠를 파이프할 수 있는 셸 함수를 만듭니다.

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

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

그 다음에,

ps -ef | G mysql | A 2

그러나 Linux 시스템에서 이 특정 파이프는 다음과 거의 동일합니다.

pgrep mysql

관련 정보