não pode obter um “awk for loop” para funcionar, enquanto estiver usando o nome de base

0

Eu tenho muitos arquivos xyz que eu quero rodar através do awk. Eu só quero criar um novo arquivo com um "_s" anexado, para cada um. Tendo um pouco de dificuldade para obter a sintaxe basename correta. Aqui está o que eu tenho.

for i in *.xyz; do awk -F" " '{printf $1 $2 $3}' > $(basename $i)_s.xyz ; done
    
por lbeazy 23.02.2016 / 22:41

2 respostas

2

A sintaxe apropriada para gravar a saída de arquivos processados em novos arquivos com _s adicionado à parte do nome do arquivo antes da extensão seria:

for i in *.xyz; do awk -F" " '{printf $1 $2 $3}' $i > ${i%\.*}_s.xyz ; done

a parte ${i%\.*} retira a sequência $i da última ocorrência de . até o final, removendo efetivamente a extensão.

No seu exemplo, você poderia usar ${i%\.xyz} , mas isso seria menos universal.

    
por 23.02.2016 / 22:58
0

Você precisa passar os nomes dos arquivos como 'ls * .xyz' e renomear $ i.

for i in 'ls *.xyz'; do
  mv $i $i_s
done
    
por 23.02.2016 / 23:19

Tags