我有以下代码:
redirect('dashboard');
我可以修改$ awk_cmd以避免以后使用sed删除不需要的空格吗?
暗示的awk版本是与BusyBox v1.26.2
一起出现的版本答案 0 :(得分:2)
这可能是你想要的:
function awk_cmd { awk -v pid="$1" -v ORS= '$4 == pid{$1=$1; print}'; }
printf "$(date +%s)$EPM_DB_SEP" >> "$EPM_RUN_DIR/$2.pid"
ps -e -o user,group,comm,pid,ppid,pgid,etime,nice,rgroup,ruser,time,tty,vsz,stat,rss,args |
awk_cmd "$1" >> "$EPM_RUN_DIR/$2.pid"
但没有样本输入/输出,这是一个未经测试的猜测。
答案 1 :(得分:0)
我正在添加另一个答案,因为我无法编辑第一个答案(我不明白为什么并联系了该网站...)。我给出了更多的背景,并考虑到了Ed Morton的评论。还将“pid”放在第一列。
filter_pid() { awk -v pid="$1" -v ORS= '$1 == pid{$1=$1; print}'; }
ps_store_current_info() {
printf "$(date +%s)$EPM_DB_SEP" >> "$EPM_RUN_DIR/$2.pid"
ps -e -o pid,ppid,user,group,comm,pgid,etime,nice,rgroup,ruser,time,tty,vsz,stat,rss,args |\
filter_pid $1 >> "$EPM_RUN_DIR/$2.pid"
printf "\n" >> "$EPM_RUN_DIR/$2.pid"
}
$ EPM_DB_SEP等于|
,$ EPM_RUN_DIR指向目录。
我很清楚这样做并不是很聪明,因为我以后无法将空格用作我的(子)字段分隔符,但这确实是另一个问题......
答案 2 :(得分:-1)
很简单......
awk_cmd='{ if ($4 == '"$1"') { printf $0 } }'
printf "$(date +%s)$EPM_DB_SEP" >> "$EPM_RUN_DIR/$2.pid"
ps -e -o user,group,comm,pid,ppid,pgid,etime,nice,rgroup,ruser,time,tty,vsz,stat,rss,args |\
awk "$awk_cmd" | sed 's/ */ /g' >> "$EPM_RUN_DIR/$2.pid"