Я не знаю этого по факту, но я бы предположил, что Disk Utility сообщает вам фактический размер, а Gparted сообщает вам о рабочем размере, так как файловая система и таблица разделов занимают немного места. Размеры размещения не являются фактором, поскольку они не занимают места, это всего лишь настройка.
Поскольку порядок может измениться, это займет немного скриптов. Вот версия Perl:
#!/usr/bin/perl -nl
my $time = $1 if /\[(.+?)\]/;
my $city = $1 if /city=(.*?)(&|$)/;
my $lang = $1 if /language=(.*?)(&|$)/;
my $x = $1 if /\bx=(.*?)(&|$)/;
my $y = $1 if /\by=(.*?)(&|$)/;
my $z = $1 if /\bz=(.*?)(&|$)/;
print join ",", ($time, $city, $lang, $x, $y, $z)
Сохраните это как foo.pl, сделайте его выполнимым (chmod +x foo.pl) и запустите его следующим образом:
./foo.pl file.txt
Вы также можете сжать
-n означает «читать входной файл по строкам и применять сценарий к каждой строке. [
В каждом случае мы используем регулярное выражение для поиска целевой строки и присваиваем ее переменной, если совпадение было первое регулярное выражение, \[(.+?)\] соответствует любому значению между [ и первым ]. Скобки вокруг .+ - это группы захвата, и мы будем ссылаться на то, что было зафиксировано как $1. Итак, $time ] будет тем, что было внутри [ ].
Другие регулярные выражения следуют той же идее. \b означает «символ без слова» и гарантирует, что y= не будет соответствовать city и т. д. (&|$) означает захват групп a & или конец строки ($) и необходим для захвата паттернов в самом конце t он линия.
Наконец, мы join с запятыми и напечатаем их.
Поскольку порядок может меняться, это немного сложнее, но sed может справиться с этим:
s/\[(.*)\](\/segment\?)(.*)/\3,\1/ #Match text between [], append to end of line and remove /segmennt?
s/city=([^&,]*)[&,](.*)/\2,\1/ #Match city= followed by any character
s/language=([^&,]*)[&,](.*)/\2,\1/ #except & and , which are the separators and append to end of line
s/x=([^&,]*)[&,](.*)/\2,\1/
s/\by=([^&,]*)[&,](.*)/\2,\1/ #Avoid matching city again by making sure y is at a word boundary
s/z=([^&,]*)[&,](.*)/\2,\1/
Запуск от имени: sed -rnf scriptfile inputfile