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
我正在尝试将 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