web-dev-qa-db-ja.com

ファイル名の番号に基づく特定の順序の猫ファイル

file.88_0.pdbfile.88_1.pdb...file.88_100.pdbという名前のファイルがあります。それらをcatして、file.88_1.pdbfile.88_0.pdbの後に貼り付けられ、file.88_2.pdbfile.88_1.pdbの後に貼り付けられるようにします。 cat file.88_*.pdb > all.pdbを実行すると、ファイルは次の順序でまとめられます:0 1 10 11 12 13 14 15 16 17 18 19 2 20...など。順序を0 1 2 3 4 5 6...にするにはどうすればいいですか?

11
sodiumnitrate

使用する - brace expansion

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

存在しないファイルのエラーメッセージの出力を無視するには、次のコマンドを使用します。

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

zshシェルには、(n)グロブの数値ソートを要求するためのグロブ修飾子(デフォルトのalphabeticalとは対照的に):

cat file.88_*.pdb(n) >>bigfile.pdb 2>/dev/null
24
αғsнιη
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)
3
Hauke Laging

試してください:

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

これは、区切り文字として-k2を使用して、(_)2番目のフィールドでファイルをsortすることができました。ここでは>>を使用する必要があります。そうしないと、新しいファイルごとに最後のファイルが上書きされます。

2
jesse_b

括弧なしのシェルでは、ls + xargsを使用できます。

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

lsはファイルを数値順にソートします。

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

2