Você pode armazenar o código passado para /usr/bin/awk em uma variável e
/usr/bin/awk em uma variável separada como assim (não testado):
awk=/usr/bin/awk
awkcommand='
$1 == "Group" {printf("\section{%s %d}\n", $1, $2); next}
{
title = sep = ""
for (i=1; i<=NF; i++)
if ($i ~ /^[0-9][0-9][0-9]$/) {
printf("\subsection{%s} \n\TestDetails{%d}\n", title, $i)
break
}
else {
title = title sep $i
sep = FS
}
}
'
Uso:
$awk "$awkcommand"
Observe que alterei as aspas duplas para aspas simples.
Entre aspas duplas, $i é substituído pelo conteúdo do shell
variável i . Entre aspas simples, é um literal $i , que é
o que awk espera ver.
Além disso, você não estava escapando das aspas duplas dentro da string.
awk nunca viu
$1 == "Group" {printf("\section{%s %d}\n", $1, $2); next}
Em vez disso, viu
<contents of shell $1> == Group {printf(\section{%s %d}\n, <contents of shell $1>, <contents of shell $2>); next}
Se $1 e $2 estiverem vazios, awk viu
== Group {printf(\section{%s %d}\n, , ); next}
Tem certeza de que armazenar o local do comando é necessário? Você geralmente pode depender
em encontrar awk dentro de um diretório no caminho do usuário. Se você não usar o
caminho completo para awk , não há razão para parametrizar awk .