Предполагая, что ваши данные находятся в файле с именем file
, следующая команда будет читать каждую строку этого файла и выводить три ее столбца в формате, который вы предписываете:
$ awk '{ printf("%s Free\n%s Used\n%s Utilised\n", $1, $2, $3) }' file
62G Free
57G Used
52% Utilised
Для каждой строки ввода будет выполняться блок в коде. Этот блок содержит один оператор printf()
, который форматирует три столбца, разделенных пробелами -, в три строки с добавленным текстом.
Сделать это с помощью sed
было бы не невозможно, но излишне сложно:
$ sed -e 's/[[:blank:]][[:blank:]]*/:/g' -e 's/:/ Free@/' -e 's/:/ Used@/' -e 's/%/% Utilised/' -e 'y/@/\n/' file
62G Free
57G Used
52% Utilised
Сначала все пробельные символы будут сжаты в одиночные :
символы, а затем вставлены нужные добавленные текстовые строки, заменяя эти :
символы один за другим. При вставке мы также добавляем символы @
везде, где хотим позже вставить новую строку. В качестве последнего шага мы меняем все вставленные символы @
на новые строки.
Обратите внимание, что с GNU sed
,что позволяет использовать \n
в замещающей части команды s///
, вы можете сделать ее короче:
$ gsed -E -e 's/[[:blank:]]+/:/g' -e 's/:/ Free\n/' -e 's/:/ Used\n/' -e 's/%/% Utilised/' file
62G Free
57G Used
52% Utilised
Оба этих sed
решения основаны на том факте, что мы можем использовать :
и @
в качестве временных «символов-заполнителей» в строке и что они больше нигде в ней не встречаются.
Ответ может быть немного запоздалым. У меня сейчас такая же проблема с настройкой WiFi с Fedora 33 на Raspberry Pi 4. Я использую no
вместо yes
в следующем, чтобы решить проблему:
<allow_any>no</allow_any>
Надеюсь, что это поможет.