Удалить завершающие пробелы в команде df

Su segundo guión sed,

N
s/\n/ /

no funciona de la manera esperada porque leerá una línea, luego agregará la siguiente línea con una nueva línea incrustada insertada por el comando N, y luego reemplazará esa nueva línea con un espacio (y generará ). Al leer la línea siguiente, este resultado de las dos primeras líneas se descarta.

En su lugar, habría tenido que usar el espacio de espera:

H;            # append to hold space with a '\n' embedded
              # for the last line:
${
    x;        # swap in the hold space
    s/\n//;   # delete the first newline (from the H command on the very first line of input)
    y/\n/ /;  # replace all other newlines with spaces
    p;        # print result
}

Este script se ejecuta una vez por cada línea de entrada, recopilando datos en el espacio de espera hasta que lleguemos a la última línea. En la última línea, procesamos los datos recopilados y los generamos.

Ejecutarías esto consed -n:

$ sed '=' <file2 | sed -n 'H; ${ x; s/\n//; y/\n/ /; p; }'
1 this is  2  not is  3  is is  4  this biz

(sin nueva línea al final de la salida, ya que no había ninguna al final de la entrada ).

Alternativamente, con un bucle explícito podemos usar N. El truco aquí es nunca llegar al final del script hasta que estemos listos para imprimir el resultado.

:top;     # define label 'top'
N;        # append next line with a '\n' embedded
$!btop;   # if not at end, branch to 'top'
y/\n/ /;  # replace all newlines with spaces
          # (implicit print)

Este script solo ejecuta (hasta el final )una vez y administra la lectura de los datos en sí, mientras que el script anterior fue alimentado con datos por el bucle de lectura integrado -ensed(que reemplaza el espacio del patrón para cada línea leída, que fue su problema ). Utiliza el espacio de patrones en lugar del espacio de retención para recopilar los datos y los procesa cuando se lee la última línea.

En la línea de comando:

$ sed '=' <file2 | sed ':top; N; $!btop; y/\n/ /'

(misma salida que arriba)

3
29.06.2019, 04:59
2 ответа

А как насчет этого:

df -h --output=used,avail,pcent / | awk '{$1=$1;print}' | sed 's/ /\t'/g

Заменить пробелы на вкладки.

0
27.01.2020, 21:24

Сsed:

df -h --output=used,avail,pcent / | sed 's/^ //'

Удалять пробел в начале каждой строки.

Если выравнивание по левому краю в порядке:

df -h --output=used,avail,pcent / | column -t

РЕДАКТИРОВАТЬ(для @guillermo chamorro, см. комментарии):

Для испанской версии вы можете добавить префикс к команде с переменной окружения LANG, например.

LANG=es_AR.utf8 df -h --output=used,avail,pcent

дает мне имена заголовков Usados Disp Uso%и запятые вместо точек. Для этого должна быть установлена ​​ваша локаль, отметьте locale -a. В Debian вы можете добавить локали с помощью dpkg-reconfigure locales.

2
27.01.2020, 21:24

Теги

Похожие вопросы