Quero fazer o seguinte:
- Encontre um conjunto específico de arquivos com o
find
comando; - Para qualquer arquivo encontrado, coloque a saída correspondente da
-printf
opção em uma variável chamadastr
e passe-a para o Gawk (e não imprima/use essa saída em nenhum outro lugar); - Execute um programa Gawk para o arquivo correspondente. O conteúdo da
str
variável correspondente deve estar disponível no programa.
Por exemplo, eu tenho o diretório chamado /d/ir
. Ele contém dois arquivos, file1.txt
e file2.txt
. Os arquivos estão na codificação UTF-8. O arquivo cujo nome é file1.txt
contém as duas linhas de texto a seguir:
A
BC
O tamanho do arquivo é 4 bytes.
O arquivo cujo nome é file2.txt
contém as três linhas de texto a seguir:
D
EF
GHI
O tamanho do arquivo é 8 bytes.
Quero imprimir todas essas linhas, anexando o conteúdo correspondente de str
(nome do arquivo, tamanho do arquivo) a cada linha. Portanto, a saída esperada é
A;d/ir/file1.txt,4
BC;d/ir/file1.txt,4
D;d/ir/file2.txt,8
EF;d/ir/file2.txt,8
GHI;d/ir/file2.txt,8
Tentei o seguinte comando:
LC_ALL=en_US.utf8; find "/d/ir" -name "file*.txt" -type f -printf "%p,%s" -execdir gawk -v str="$7" '{
print($0 ";" str)
}' "{}" \+
(Aqui eu esperava que $7
, sendo um parâmetro posicional , se referisse a "%p,%s"
) Mas ele não imprime a saída esperada: ele mostra duas saídas de -printf
(o que eu não quero que aconteça), depois cinco linhas sem os dados necessários de str
.
Qual é o comando correto que resolve o problema? Observe que não quero que as saídas da -printf
opção sejam mostradas/impressas fora do contexto do Gawk: quero apenas passá-las para o Gawk para que somente o programa Gawk saiba como usá-las. Se o programa Gawk não as usar, elas não devem ser mostradas em lugar nenhum.
Como o comando será usado para muitos arquivos, a maximização do desempenho e a minimização do consumo de memória são importantes.