Текстовый файл в поля (столбцы) при каждом n-ом вхождении строки

Для этого вам придется создать свою собственную пользовательскую политику в каталоге создайте mylocalpolicy.te со следующим содержанием:

policy_module(mylocalpolicy, 0.0.1)

type test_type_t;
files_type(test_type_t)

Затем вы можете запустить в том же каталоге: make -f /usr/share/selinux/devel/Makefile. Это создаст .pp файл, который вы можете загрузить с помощью semodule -i mylocalpolicy.pp

Пожалуйста, обратите внимание, что ничто не сможет взаимодействовать (читать/писать/удалять/...) с файлами с такой меткой.

2
19.04.2019, 01:23
3 ответа

Следующий скрипт perl выводит ваш входной файл ( markizy.txt ) в формате с разделителями табуляции, поскольку внутри полей есть пробелы.

#!/usr/bin/perl

while(<>) {
  chomp;
  s/ +(vsan|fcalias|pwwn) */\t$1 /g ;
  s/ +\t/\t/;

  if ($. > 1 && m/^zone name/) {
    print $l,"\n";
    $l = $_;
  } elsif (eof) {
    $l .= $_;
    print $l,"\n";
  } else {
    $l .= $_;
  };
};

Встроенная переменная perl $. - это номер текущей строки, поэтому сценарий избегает печати (пустая строка), когда имя зоны находится в первой строке ввода. См. man perlvar для получения подробной информации об этой и многих других переменных (и их длинных псевдонимах, таких как $ INPUT_LINE_NUMBER для $. ).

Сохраните его в файл, сделайте его исполняемым с помощью chmod + x и запустите. например с cat -T для отображения вкладок ( ^ I ):

$ ./markizy.pl markizy.txt  | cat -T
zone name Zone1_HOSTNAME01^Ivsan XXX^Ifcalias name STORAGEPORT_0^Ivsan XXX^Ipwwn xx:xx:xx:xx:xx^Ifcalias name STORAGEPORT_1^Ivsan XXX^Ipwwn xx:xx:xx:xx:xx^Ifcalias name STORAGEPORT_2^Ivsan XXX^Ipwwn xx:xx:xx:xx:xx
zone name Zone2_HOSTNAME02^Ivsan XXX^Ifcalias name STORAGEPORT_3^Ivsan XXX^Ipwwn xx:xx:xx:xx:xx^Ifcalias name STORAGEPORT_4^Ivsan XXX^Ipwwn xx:xx:xx:xx:xx^Ifcalias name HOSTNAME02^Ivsan XXX^Ipwwn xx:xx:xx:xx:xx

Канал к cat -T предназначен только для того, чтобы показать вам, что на выходе поля, разделенные табуляцией (в противном случае они не сильно отличаются от пробелов). Не используйте его при запуске по-настоящему, просто перенаправьте в файл.Excel (или gnumeric или Libre Office Calc или почти любая другая электронная таблица) не должно испытывать затруднений при импорте текстового файла с разделением табуляцией - это стандартная возможность почти столько, сколько я могу помнить.

Запустите его как:

./markizy.pl markizy.txt > markizy.csv

Возможно, вам придется сообщить Excel, что данные разделены табуляцией, а не запятыми при импорте, или он может обнаружить этот факт сам.

В качестве альтернативы, если вы абсолютно уверены, что ни одно из полей данных не будет содержать запятых, замените все \ t в скрипте запятыми, и вы получите разделение запятыми.

0
27.01.2020, 22:46

Возможно, в конечном итоге будет проще выполнить всю работу в Excel. Я вырезал и вставил ваш пример в текстовый файл, открыл его в Excel и получил следующее:

enter image description here

Оттуда вы можете использовать команду глобального поиска и замены для внесения любых изменений, которые вам могут понадобиться.

0
27.01.2020, 22:46

Казалось очевидным, что некоторые поля могут быть опущены, поскольку они будут учтены в строках, которые я создам в Excel после импорта отсортированных данных. Я уверен, что есть гораздо лучшие варианты, но это заняло весь мой вывод, поместило все значения в порядок в новой строке, а затем удалило ненужные поля для vsan | pwwn | 'zone name' | fcalias и оставило меня с только псевдонимы зоны и участников вместе с записями pwwn. Поскольку все зоны начинались с верхнего регистра Z, это также упростило задачу.

Код, который я использовал в одном лайнере, был:

grep -oP '\S+' switch01-zones-20160711 | grep -Ev 'name|vsan|^01|^02|fcalias|pwwn|zone' | awk '{printf "%s%s", (/^Zone/?rs:FS), $0; rs=RS} END{print ""}' >to-import.csv

это оставило мне красивую единственную строку для каждой Зоны и псевдоним участника с подключенным устройством www. Он также был импортирован в Excel для построения строк и всего за несколько секунд. моменты.

0
27.01.2020, 22:46

Теги

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