2014-05-19 55 views
3

我想堆疊一些文本文件作爲新列。該文件被命名爲energies_Strength0.0BosonsXXX.txt其中XXX爲80,90,100或110當我運行下面的命令:括號擴展步進增量不工作bash

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

我得到以下錯誤:

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 

了相同的命令的工作方式很好,如果文件索引在單位步驟。這是,如果XXX = {80,81,82,...,109,110},我運行命令:

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

編輯:基於

你好,我曾嘗試以下線的主意:

#$ -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 

但它只粘貼... Bosons80.txt文件。我需要建立一個結構如下所示:

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

運行'echo {110..80..10} .txt'並看看你得到了什麼。 – anubhava

+0

我只是簡單地得到了'{110..80..10} .txt',我猜這意味着擴展只是不起作用。順便說一下,'echo {110..80} .txt'確實有效。我在OSX 10.6.4 – cacosomoza

+0

沒有人會提及'{11..8} 0' –

回答

5

{110..80..10}語法僅在BASH 4+ VERSIONS上受支持。

在OSX你的BASH版本3.2.xx

您可以使用此替代算術循環:

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

{A..B}是明確定義的所謂brace expansion猛砸語法,當AB是整數。 {A..B..C}不遵循此模式,因此它被解釋爲文字

3

慶典> = 4 {100..80..10}

慶典< 4你可以seq 80 10 100

例如:
kent$ seq -f '%g.txt' 80 10 110 
80.txt 
90.txt 
100.txt 
110.txt