Это сценарий bash, поэтому процесс выполняет / bin / bash
. Это нормально.
Скрипт открывается процессом bash. Используйте ls -l / proc / 20071 / fd
или lsof -p 20071
, чтобы перечислить файлы, открытые этим процессом. По умолчанию вы найдете сценарий в файловом дескрипторе 255.
cat /proc/20071/fd/255
(Причина появления фонетических символов и диакритических знаков на вашем терминале и то, как это происходит, - это разные вопросы, по которым у вас пока нет достаточной информации.)
Siguiendo el enfoque de PO, reemplace awk por Perl --'Perl -ae' es muy similar a awk...
... | perl -ae ' printf "%-20s %d %s\n", $F[0], $F[1],"▄"x$F[1]'
aa 12 ▄▄▄▄▄▄▄▄▄▄▄▄
bb 23 ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
Edite :con Awk, podría ejecutar algo similar a
... | awk '{printf "%-20s %d %.*s\n",$1,$2,$2,"▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄"}'
printf
Los formatos de función(utilizados en C, Awk, Perl, printf
comando, etc. )pueden ser un poco complicados. Siguiendo algunos ejemplos con cadenas:
"%.20s,str
-ancho = máximo (20, longitud (str )), alineación = izquierda "%20s",str
-ancho = máximo (20, longitud (cadena )), alineación = derecho "%.20s",str
-width=min (20,len (str )), se trunca si len>20 "%20.20s,str
-ancho=20, se trunca si largo>20,alinear = derecha "%*s",30,str
-esprintt("%30s",str)
"%.*s",30,str
-esprintt("%.30s",str)
Con la ayuda de @JJoao, esto es lo que se me ocurrió más adelante:
$ history | tr -s ' ' | cut -d ' ' -f3 | sort | uniq -c | sort -nr | head | awk '{ printf "%-25s %-4d", $2, $1, n = $1 / 5; s = sprintf("%*.s", n, ""); gsub(/ /, "◼", s); print s }'
history 227 ◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼
./rebar3 30 ◼◼◼◼◼◼
cat 26 ◼◼◼◼◼
cd 24 ◼◼◼◼
docker 21 ◼◼◼◼
ps 20 ◼◼◼◼
bin/erlang_cowboy 19 ◼◼◼
sudo 13 ◼◼
nix-env 8 ◼
nix-channel 8 ◼
No es un "gran problema", pero es algo que necesito en el trabajo... en caso de que alguien lo necesite más adelante.
Creo que estás buscando xargs
para la primera parte. Por ejemplo:
$ echo foo bar| xargs printf "- %s - %s -\n"
- foo - bar -
Para rellenar y ajustar a la izquierda la salida de printf, puede hacer algo como:
$ echo foobar 19 | xargs printf '%-30s %s'
foobar 19
Para asegurarse de que el formato se adapte al nombre de comando más largo y para crear la barra, probablemente tendrá que escribir algo más complicado que verifique la longitud del argumento más largo en la primera columna y luego no se imprima. los resultados hasta que haya leído toda la entrada, por ejemplo usando awk
.