Eu tenho um loop for que aceita um arquivo com um tipo de extensão, mas o comando final no pipe requer que o arquivo STDIN tenha uma extensão de outro tipo. No meu pipe eu costumo awk
alterar o tipo de arquivo para que fique formatado corretamente para o comando final, mas a extensão ainda está vinculada ao arquivo de entrada inicial.
Por exemplo:
for file in *.AAA
do
commandA $file | awk ' { print } ' | commandB
Um uso típico do comandoB:
commandB -i myfile.BBB
Existe uma maneira de alterar a extensão de um arquivo no meio de um for loop & pipe?
Eu acho que você pode alterar a extensão de um arquivo no meio de um loop for e pipe. Como você pode ver,
${file%.*}
é um truque legal que basicamente remove a extensão do arquivo (*.AAA
) do nome do arquivo original e, em seguida, adiciono a.BBB
extensão para criar o novo nome do arquivo, que eu chamonew_file
, e ainda por cima, passo esse arquivo modificado paracommandB
com a-i
opção!ou você pode usar a substituição de processo, então eu uso
sed
para alterar a extensão do arquivo de.AAA
para.BBB
no nome do arquivo e, em seguida, passo esse nome de arquivo modificado sofisticado paracommandB
usar algo chamado substituição de processo, que trata a saída do comando como um arquivo temporário: