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


12

私は名前のファイルを持ってfile.88_0.pdbfile.88_1.pdb...file.88_100.pdb。私がしたいcatそれらので、file.88_1.pdb後に貼り付けますfile.88_0.pdbfile.88_2.pdb後にfile.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...


1
ちなみに、あなたがフィールドで働いているなら、あなたは私たちの新しいバイオインフォマティクスサイトに興味があるかもしれません。
terdon

回答:


24

使用する brace expansion

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

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

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

zshシェルもあなたが持っている(n)要求するグロブ修飾子を数値ソート(デフォルトとは対照的に、アルファベットグロブのために):

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

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)

3

ブレース拡張なしのシェルではls+ を使用できますxargs

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

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

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


2

試してください:

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する(-k2)の2番目のフィールドによってファイルをオンにすることができました_。ここで使用する必要があります。>>そうしないと、新しいファイルごとに最後のファイルが上書きされます。


私はまだ間違った注文を受けます:0 1 10 11 12...
硝酸ナトリウム2017

あなたは何のOSを実行していますか?あなたがsort --version何をするならあなたは何を得るのですか?そして、あなたは-n正しいソートコマンドを持っていますか?
jesse_b 2017

OSX El Capitan、sort (GNU coreutils) 5.93
硝酸ナトリウム2017

1
試していただきありがとうございます!/dev/null他の答えへの追加が大いに必要でした!
硝酸ナトリウム2017

1
コマンド置換の無駄な使用find ... | sort ... | xargs cat >> $output代わりに次のようなものを使用してください。
David Foerster 2017
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.