awk正規表現で環境変数を使用するには?

awk正規表現で環境変数を使用するには?
#!/bin/sh
ALTER="1153"
NAME="aio"

for i in $(ps -eo pid,etime,comm | \
  awk -v alt="$ALTER" -v name="$NAME" '$2~/[^0-alt]-/ && $3~/name/{print$1} ');
do
  echo $i
done

答え1

使用する必要はありませんアッ:

for pr in $(pgrep $NAME); do 
    elapse=$(ps -o etime= -p $pr)
    [ "${elapse%-*}" -gt "$ALTER" ] && echo $pr
done

または、スティーブン・チャジェラス'コメント

ps -C $NAME -o pid=,etime= | awk '$2 + 0 > a && /-/ {print $1}' a="$ALTER"

答え2

これを使用してください:

awk -v alt="$ALTER" -v name="$NAME" '
   $2 ~ /-/ && $2 >= alt && $3 ~ name{print $1}' file
  • $2 ~ /-/:曜日が含まれていることを確認してください。
  • $2 >= alt:日数がetime大きいことを確認してください$ALTER
  • $3 ~ name:3番目のフィールドでname()値を取得します。$NAME

もう一つの純粋なbash解決策:

ps -eo pid,etime,comm | while read p e n; do
  if [[ $n =~ $NAME ]] && [[ $e =~ \- ]] && [ "${e%%-*}" -gt "$ALTER" ]; then 
    echo $p
  fi
done
  • while read p e npid、etime、およびコマンド名を変数およびに$p保存$eします$n
    • [[ $n =~ $NAME ]]:コマンド$NAMEに内容があることを確認してください。
    • [[ $e =~ \- ]]:etimeにダッシュ(-)があることを確認する(プロセスが1日以上実行されたことを示す)
    • [ "${e%%-*}" -ge "$ALTER" ]:etimeの日数カウンタが次の値以上であることを確認してください。$ALTER
  • 上記の条件がすべて満たされたら、pidを印刷します。echo $p

関連情報