Você não pode classificar todos os registros com apenas um passe.
Para responder literalmente à sua pergunta principal para corresponder a um campo com uma variável, basta fazer match($2,i)
sem /.../
(ou match($2, i "\"")
para i
seguido de "
. Usando a sintaxe normal de concatenação de cadeias) .
Mesmo este lhe trará resultados corretos para um registro contendo "4":
awk '{i=4}$0 ~ "\"" i "\""' file1 #(string concatenation yelds to "4")
Mas este, embora funcione sem erros, não classificará automaticamente os dados com uma única passagem, como você poderia esperar:
awk '{for (i=1;i<8;i++) if ($0 ~ "\"" i "\"") print}' file1
Para classificar todos os registros necessários primeiro para carregar todos os registros na memória e imprimi-los em uma ordem de classificação.
Esta é uma abordagem diferente que funciona com o seu arquivo de amostra:
awk -F"[\"]" '{a[$4]?a[$4]=a[$4] ORS $0:a[$4]=$0;last=NR}END{for (i=1;i<=last;i++) if (a[i]) print a[i]}' file1
O uso do delimitador "
text da primeira linha "fechaName": "1",....
será dividido em 4 partes e 1
(campo $ 4) poderá ser usado diretamente como um número inteiro.
A parte a[$4]?a[$4]=a[$4] ORS $0:a[$4]=$0
é apenas um if-then-else:
se a[$4]
(== > a[1]
para primeira linha) já tiver um valor, adicione essa linha ao conteúdo anterior de [$ 4] usando o ORS (Output Record Separator) que é uma nova linha (ou poderia ser um litteral "\ n") - senão aplicar $ 0 a um [$ 4]
Finalmente, na seção final, apenas imprimimos esta matriz.
Precisamos dizer que esse tipo será muito mais rápido do que o awk para esta operação:
LC_ALL=C sort -t"\"" -k3 file1