Bash: 对逗号分隔的列使用 printf

Bash: Use printf for comma seperated columns

我正在尝试将 ps 的输出写入带有自定义 headers 的两个 comma-separated 列,我可以将其写入 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 命令中进行上述替换?还是我处理错了?

ps -o pid,comm --no-headers | awk 'BEGIN{print "Process ID,Command name"}{=}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