Bash para saída de redirecionamento de loop para variável filename

2

No loop bash a seguir, desejo redirecionar o conteúdo para um nome de arquivo variável.

for i in {1..22};do echo $i > $i_output.txt; done

Infelizmente, os arquivos não são criados. O que eu originalmente quero fazer é dar uma olhada nos cromossomos em um arquivo e criar um arquivo por cromossomo. Mas isso é menos testável:

for i in {1..22}; grep -E "[a-z]+[0-9]+\t$i\t" rawdata.txt > $i_chr.txt;done

Como podemos redirecionar a saída em um loop for para um nome de arquivo variável?

    
por Robin D. 13.06.2017 / 10:32

1 resposta

1

Você tem que usar chaves ou aspas duplas em torno do nome da variável. O loop a seguir funciona.
Caso contrário, o shell tentará expandir a variável $i_output .

for i in {1..22};do echo ${i} > ${i}_output.txt; done
for i in {1..22};do echo "$i" > "$i"_output.txt; done

No seu caso, chaves podem ser a melhor opção, já que você já usa aspas duplas e seu shell terá um problema com a classificação das aspas duplas internas e externas.

for i in {1..22}; grep -E "[a-z]+[0-9]+\t${i}\t" rawdata.txt > ${i}_chr.txt;done
    
por 13.06.2017 / 11:50

Tags