Это делает то, что вы хотите, если вам нужно использоватьawk
:
$ awk 'BEGIN{FS=":"; OFS=":"}{$1=$3=$4=$5="";gsub("^"FS,"",$0);gsub(FS"+",FS,$0)}1' <your file>
BEGIN{FS=":"; OFS=":"}
. ""
. gsub
наводит порядок, удаляя все двоеточия (:
), которые могут начинаться в начале. = Второй gsub
удаляет любые последовательности двоеточий(:
)из оставшейся строки в $0
. 1
. ... but cannot fork to it
exec
вообще не разветвляется, а заменяет текущий код приложения (, то есть perl ), на новый (a.out ).
Кроме того, неясно, какой вывод вообще ожидается от a.out
, т.е. проблема может быть в a.out
, а не в perl.
Также может случиться так, что система просто не ищет a.out
в локальном каталоге для двоичного файла, поскольку переменная среды PATH
явно не включает .
. Для принудительного выполнения вместо этого выполните exec "./a.out"
.
Ответ содержится в документации exec
, но трудно понять, если вы не знаете, что ищете.
If there is more than one argument in LIST, this calls execvp(3) with the arguments in LIST. If there is only one element in LIST, the argument is checked for shell metacharacters, and if there are any, the entire argument is passed to the system's command shell for parsing (…). If there are no shell metacharacters in the argument, it is split into words and passed directly to execvp (…).
Во всех случаях имя команды ищется в пути (либо Perl, либо оболочкой ):, если оно не содержит /
, оно ищется в пути поиска команды($PATH
), который обычно не содержит текущий каталог.
Изменить на
exec "./a.out"