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
.