ファイル名の数に基づいて特定の順序でcatファイルをソートします。

ファイル名の数に基づいて特定の順序でcatファイルをソートします。

file.88_0.pdb、、、、file.88_1.pdbという...ファイルがありますfile.88_100.pdb。後ろ、後ろに貼り付けcatたいです。file.88_1.pdbこれにより、ファイルは次の順序でクリーンアップされます。順番に組み合わせるにはどうすればよいですか?file.88_0.pdbfile.88_2.pdbfile.88_1.pdbcat file.88_*.pdb > all.pdb0 1 10 11 12 13 14 15 16 17 18 19 2 20...0 1 2 3 4 5 6...

答え1

使用brace expansion

cat file.88_{0..100}.pdb >>bigfile.pdb

ファイルが存在しないというエラーメッセージの印刷を無視するには、次のようにします。

cat file.88_{0..100}.pdb >>bigfile.pdb 2>/dev/null

zshシェルでは、(n)globbing修飾子を使用して要求することもできます。数値ソート(デフォルトアルファベット順に)グローバルの場合:

cat file.88_*.pdb(n) >>bigfile.pdb 2>/dev/null

答え2

中かっこ拡張のないシェルでは、ファイル名にスペース、引用符、またはバックスラッシュが含まれていない場合ls(GNU実装の仮定)+を使用できますxargs

ls -v file.88_*.pdb | xargs cat > all.pdb

lsファイルは番号順にソートされます。

-v テキスト内の(バージョン)番号の自然な順序。

答え3

cat $(for((i=0;i<101;i++)); do echo -n "file.88_${i}.pdb "; done)

またはJesse_bのコメントに関して:

cat $(for((i=0;i<101;i++)); do test -f "file.88_${i}.pdb" && echo -n "file.88_${i}.pdb "; done)

答え4

努力する:

filedir="/path/to/files"
output="/path/to/all.pdb"
for file in $(find $filedir -type f -name "file.88_*" | sort -t "_" -k2 -n); do
    cat $file >> $output
done

これにより、sort()2番目のフィールドを区切り文字-k2として使用できます。_ここを使用する必要があります>>。それ以外の場合は、各新しいファイルが古いファイルを上書きします。

関連情報