使用awk删除不需要的空格

时间:2017-12-09 23:21:10

标签: shell awk

我有以下代码:

redirect('dashboard');

我可以修改$ awk_cmd以避免以后使用sed删除不需要的空格吗?

暗示的awk版本是与BusyBox v1.26.2

一起出现的版本

3 个答案:

答案 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"