以前のbashスクリプトを使用して、ファイルのリストを作成しました。
data_1_box
data_2_box
...
data_10_box
...
data_99_box
問題は、それらを連結する必要があるということです。
ls -l data_ *
しかし私は得る
.....
data_89_box
data_8_box
data_90_box
...
data_99_box
data_9_box
1、2、3、4、...、9、...、89、90、91、...、99
バッシュでできますか?
ls data_* | sort -n -t _ -k 2
-n:数値で並べ替え
-t:フィールド区切り文字 '_'
-k:2番目のフィールドでソートします。あなたの場合、最初の '_'の後の数字
-v
フラグをls
に?フラグの目的は、バージョン番号に従ってファイルを並べ替えることですが、ここでも同様に機能し、結果をsort
にパイプする必要がなくなります。
ls -lv data_*
sort
にバージョンソートがある場合は、以下を試してください。
ls -1 | sort -V
(それは大文字Vです)。
これは一般的な答えです。特定のデータセットにルールを適用する必要があります
ls | sort
例:
ls | sort -n -t _ -k 2
多分あなたは好きになるでしょう SistemaNumeri.py ( "fix numbers"):それはあなたの名前を変更します
data_1_box
data_2_box
...
data_10_box
...
data_99_box
に
data_01_box
data_02_box
...
data_10_box
...
data_99_box
ソートにバージョンソートがない場合にbashでそれを行う方法は次のとおりです。
cat <your_former_ls_output_file> | awk ' BEGIN { FS="_" } { printf( "%03d\n",$2) }' | sort | awk ' { printf( "data_%d_box\n", $1) }'
すべて1行で。覚えておいてください、私はあなたの特定のデータでこれをテストしなかったので、あなたのために正しく働くためにそれは少し微調整を必要とするかもしれません。ただし、これは優れた堅牢で比較的単純なソリューションの概要です。もちろん、最初にcat + filenameを実際のlsといつでも入れ替えて、その場でファイルデータを作成できます。実際のファイル名の列をキャプチャするには、正しいlsパラメータを選択するか、cutまたはawkのいずれかを介してパイピングします。
私が考えることができる1つの提案はこれです:
for i in `seq 1 5`
do
cat "data_${i}_box"
done