Existem alguns problemas aqui, alguns que geram erros e outros que são apenas erros de digitação ou o resultado de mal-entendidos:
-
A
#!
-line pode ser removida ou ele deve dizer#!/usr/bin/awk -f
(ou qualquer que seja a localização de
awk
no seu sistema). Com o#!
-line acima, você não precisa chamar o script comawk -f
na linha de comando, mas pode usar./script.awk
diretamente, se for executável. Sem#!
-line, você precisa usarawk -f
na linha de comando. -
Para fazer referência ao valor em um determinado campo nos dados de entrada, use
$n
, em quen
é o número do campo ao qual você está se referindo, nãon$
. -
A string de formatação
printf
tem apenas um espaço reservado no formato, mas você está fornecendo três partes de dados. Também não há parênteses em torno de seus argumentos. -
O bloco
END
pode ser removido. -
Se a entrada tiver delimitadores de campo, como
,
ou|
, em vez de serem delimitados em espaços em branco (espaços ou tabulações), você deverá informarawk
sobre isso usando, por exemplo,awk -F ','
ouawk -F '|'
, ou definindo a variávelFS
para o caractere apropriado no blocoBEGIN
. Caso contrário, o script dividirá os registros de entrada incorretamente.
Isso nos deixa com o script ( script.awk
):
BEGIN {
fmt = "%-15s\t%-15s\t%-15s\n"
printf(fmt, "Author", "Name of Book", "ISBN")
printf(fmt, "------", "------------", "----")
}
{ printf(fmt, $1, $2, $3) }
Tomei a liberdade de introduzir uma string de formato que formata cada um dos três campos delimitados por tabulação como uma string justificada à esquerda. Cada campo recebe 15 caracteres de espaço. Você pode facilmente ajustar isso alterando fmt
no bloco BEGIN
.
A invocação seria
sort -t ',' -k 3,3 INPUTFILE.INPUT | awk -F ',' -f script.awk
Aqui, é assumido que os dados no arquivo são separados por vírgulas (e o comando sort
foi alterado de acordo).