4

1.csv、2.csv、3.csv、...89.csv... n.csv という名前のファイルが与えられた場合、bash シェル スクリプトでそれらを番号順に (1 から n) に追加するにはどうすればよいですか? ソリューションのワンライナーはありますか?

4

2 に答える 2

2

ファイルの名前が先頭にゼロが付いている場合は、より簡単になります。つまり、

  cat [0-9].csv [0-9][0-9].csv .... > new.csv

しかし、与えられた真の数値順序を取得するのはそれほど難しくありません

ls -1
1
10
11
12
13
2
20
21
3
7
8
9

(両方のサンプルで、ls のオプションは文字 L (l) ではなく、数字の 1 (1) であることに注意してください)

ls -1 [0-9]* | sort -n
1
2
3
7
8
9
10
11
12
13
20
21

それから

  cat $( ls -1 *.csv | sort -n  ) > new.csv

すべてのcsvファイルに番号が付けられていると仮定します。

1000 個を超えるファイルがある場合、シェルでのファイル arg 処理が機能しなくなる可能性があるため、xargs を正しく使用するために新しい質問を投稿する必要があります。

何が起こっているかを確認するには、シェルのデバッグ/トレースの使用を追加します

 set -vx  # to turn on
 set +vx  # to turn it off

.

IHTH。

于 2012-11-10T01:38:30.017 に答える
0

インライン パラメータを持つ 1 つのライナー (N を最大ファイル番号に置き換える必要があります)。スクリプトは存在しないファイルをスキップするため、いくつかのファイルを順番に見逃すと、エラーは発生しません:)

for i in `seq 0 N`; do test -f $i.csv && cat $i.csv; done >> result.csv

またはパラメーターを使用してスクリプトを作成する

#!/bin/bash

for i in `seq 0 $1`
do
    if [ -f "$i.csv" ]
    then
        cat $i.csv >> $2
    fi
done

使用法: ./script.sh MAX_CSV_ID RESULT_FILE

例: ./script.sh 89 new.csv

于 2012-11-12T00:11:30.987 に答える