2014-05-19 5 views
3

J'essaie d'empiler certains fichiers texte en tant que nouvelles colonnes. Les fichiers sont nommés energies_Strength0.0BosonsXXX.txt où XXX est 80,90,100 ou 110. Quand je lance la commande suivante:Extension d'accolade avec l'incrément d'échelon ne fonctionnant pas bash

paste energies_Strength0.0Bosons{110..80..10}.txt | column -s $'\t' -t > energies_Strength0.0.txt 

Je reçois l'erreur suivante:

paste: energies_Strength0.0Bosons{110..80..10}.txt: No such file or directory 
paste: energies_Strength0.1Bosons{110..80..10}.txt: No such file or directory 
paste: energies_Strength0.05Bosons{110..80..10}.txt: No such file or directory 
paste: energies_Strength0.15Bosons{110..80..10}.txt: No such file or directory 

Cette même commande fonctionne seulement bien si les fichiers sont indexés en unités. Ceci est, si XXX = {80,81,82, ..., 109110} et je lance la commande:

paste energies_Strength0.0Bosons{110..80}.txt | column -s $'\t' -t > energies_Strength0.0.txt 

EDIT:

Bonjour là, je l'ai essayé les lignes suivantes en fonction de votre idée:

#$ -S /bin/bash 
LANG=C 

for ((i=110; i>=80; i-=10)); 
do 
paste energies_Strength0.0Bosons$i.txt | column -s $'\t' -t > energies_Strength0.0.txt 
done 

mais il ne colle que le fichier ... Bosons80.txt. Je dois construire une structure comme ce qui suit:

paste ...80.txt ...90.txt ...100.txt ...110.txt | column -s $'\t' -t > energies_Strength0.0.txt 
+0

Exécutez 'echo {110..80..10} .txt' et voyez ce que vous obtenez. – anubhava

+0

Je reçois simplement '{110..80..10} .txt', ce qui, je suppose, signifie que l'expansion ne fonctionne tout simplement pas. Btw, 'echo {110..80} .txt' fonctionne. Je suis sur OSX 10.6.4 – cacosomoza

+0

était personne ne va mentionner la possibilité de '{11..8} 0' –

Répondre

5

{110..80..10} La syntaxe n'est prise en charge que sur les VERSIONS BASH 4+.

Sur OSX version BASH est 3.2.xx

Vous pouvez utiliser cette arithmétique alternatif en boucle:

for ((i=110; i>=80; i-=10)); do echo $i.txt; done 
0

{A..B} est la syntaxe Bash bien définie appelée brace expansion, lorsque A et B sont des nombres entiers. {A..B..C} ne suit pas ce modèle, il est donc interprété comme littéral.

3

bash> = 4 {100..80..10}

bash < 4 vous pourriez seq 80 10 100

exemple:

kent$ seq -f '%g.txt' 80 10 110 
80.txt 
90.txt 
100.txt 
110.txt 
Questions connexes