Bash:将printf用于逗号分隔的列

时间:2018-07-29 07:42:53

标签: bash unix command-line printf ps

我正在尝试将ps的输出写入具有自定义标头的两个逗号分隔的列中,这些标头可以写入到csv文件中。目标格式如下:

Process ID,Command name
282,sort
280,ps
284,head
136,bash
283,awk
281,awk

这是我到目前为止编写的命令:

ps -o pid="Process ID" -o comm="Command name" | (read -r; printf "%s\n" "$REPLY"; sort -k2 -r)

产生以下输出:

Process ID Command name
     23104 sort
     24756 ps
     24757 bash
     19320 bash
     23103 awk

我需要用逗号替换每行中的空格字符(第一行除外,该行需要特殊处理)。有没有办法在printf命令中进行上述替换?还是我要解决这个错误?

1 个答案:

答案 0 :(得分:1)

ps -o pid,comm --no-headers | awk 'BEGIN{print "Process ID,Command name"}{$1=$1}1' OFS=,

您可以使用printf read组合键。但是,在您的代码中,printf仅打印read读取的第一行。其余的由sort打印。 while圈是您的朋友在这里:

printf 'Process ID,Command name\n'
while read -r id cmd; do
    printf '%s,%s\n' "$id" "$cmd"
done < <(ps -o pid,comm --no-headers)

要对ps的输出进行排序,请像您一样将其通过管道传输到sort,或使用--sort选项:

ps -o pid,comm --no-headers --sort -comm
相关问题