Я пытаюсь написать скрипт perl для генерации xml из произвольных табличных данных, которые доступны в текстовом файле. Для обсуждения ради позволяет сказать, что я хочу взять вывод команды LinuxЕсть ли способ эффективно идентифицировать/извлечь заголовки из таблицы: Perl
df -k
и разобрать его на мой PERL скрипт и сгенерировать XML на лету.
Образец check_disk_usage.log
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda3 56776092 5431448 48413988 11%/
/dev/sda1 101086 18993 76874 20% /boot
tmpfs 2021888 0 2021888 0% /dev/shm
Теперь для того, чтобы генерировать XML, мне нужно, чтобы извлечь заголовки из этой таблицы и хранить их в массив для последующего использования (они будут использоваться в качестве открывающих и закрывающих тегов в XML) Как я это делаю:
open my $file, '<', "$dir/check_disk_usage.log";
my $firstLine = <$file>;
close $file;
my (@header) = $firstLine =~ /(\S+)/g;
т.е. я ищу всех один или более непробельных шаблонов (фактически слово) и сохранение их в виде массива. Это работает прекрасно до тех пор, как имена заголовков следуют моделям, чтобы быть единственным словом
eg Filesystem,1K-blocks,Used etc
Однако, когда имя заголовка са «Установленные на» встречается, он сломается, как и «конный» и «на "будут рассматриваться как разные шаблоны и, следовательно, будут храниться как разные элементы массива. Есть ли способ эффективно идентифицировать/извлечь заголовки из таблицы.
PS: Я знаю, я мог бы использовать awk, чтобы что-то заменить, и затем проанализировать файл. Но тогда мне нужно будет знать «оскорбительный шаблон» перед рукой, что невозможно, поскольку я планирую написать этот скрипт для любых произвольных табличных данных.
PSS: Хотя я работаю с Perl, я открыт для других решений, а также (например, PHP и т.д.)
Цените вашу помощь.
Я думаю, что «установлен на» - это единственный «плохой» случай, который вы найдете. В имени нет имен файлов, поэтому вы можете даже жестко определить этот случай. – fedorqui
Если данные действительно произвольны и не могут быть захвачены общими правилами, то вы являетесь SOL без применения соответствующих правил крайнего случая. Лично я бы определил правила * за * выходной формат. – user2864740
'unpack' и' substr' обрабатывают данные фиксированной ширины. – TLP