我正在尝试将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
命令中进行上述替换?还是我要解决这个错误?
答案 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