Нет, нет, нет, нет, нет!
SELinux здесь не просто так. Ваши приложения никогда не должны иметь метки init_exec_t
. Эта метка зарезервирована для systemd или других систем инициализации, которые могут использоваться в системе, как вы можете видеть в политике Fedora (например).
Запуск приложений в этом контексте устанавливает для них особый режим и ожидает, что это приложение будет вести себя как система инициализации (что, конечно же, не так).
Чтобы решить эту проблему, вам нужно поделиться, что это приложение должно делать, как оно запускается и где хранится. Как правило, вы должны иметь возможность установить для исполняемого файла какой-либо разумный контекст выполнения (sbin_exec_t
?), а для других — какой-то общий контекст, читаемый для этих файлов (etc_t
?).
У меня нет под рукой RHEL/Fedora, чтобы дать более конкретные советы в данный момент, но, конечно, ответ не в том, чтобы установить для всего контекста значение init_exec_t
. Это не сработает.
Используйте awk
с несколькими разделителями.
awk -F"[\" \t]" '{print $1,$11,$14,$20,$40}' infile.txt
awk
использует пробел в качестве разделителя.
Попробуйте это:
$ awk '{print $1, $4, $5, $7, substr($16, 2, 7) }' file
chr1 11869 12227 + DDX11L1
chr1 12010 12057 + DDX11L1
Если у вас есть GNU awk, вы можете использовать gensub
для замены с помощью подходящего регулярного выражения, например. предполагая, что все из gene_id
является одной вкладкой -поле с разделителями 9:
gawk -F '\t' '{$9 = gensub(/.*gene_name "([^"]*)".*/,"\\1","1",$9); print $1,$4,$5,$7,$9}' input
chr1 11869 12227 + DDX11L1
chr1 12010 12057 + DDX11L1