0

各行が参加者番号で始まり、その後に日付とその他の変数 (数字のみ) が続く txt ファイルがあります。形式は次のとおりです。

 S001_2 20090926 14756 93    
 S002_2 20090803 15876 13    

ファイルごとに 20 人の参加者のみを含む小さな txt ファイルを作成するスクリプトを作成したいと考えています (したがって、最初のファイルには S001_2 から S020_2 までの行が含まれ、2 番目には S021_2 から S040_2 までの行が含まれ、被験者の総数は約 200 になります)。ただ、科目が整理されていないので、sedで範囲を設定することができません。

行が始まる番号 (SOO1_2) に応じて、ppt をチャンクにフィルター処理するための最適なコマンドは何ですか?

前もって感謝します。

4

3 に答える 3

1
$ split -d -l 20 file.txt -a3 db_

生成:db_000、db_001、db_002、...、db_N

于 2012-09-27T17:57:22.697 に答える
1

のような数字の先頭にゼロがあるため、パラメーターなしの並べ替えが適しているはずS001_2です。したがって、最初にファイルをソートします。

sort file.txt > sorted.txt

次に、file_sort.txtのsedで範囲を設定できるようになります

これは、ソートされたファイルを 20 行のファイルに分割するスクリプト全体のように見えます。

num=1;
i=1;
lines=`wc -l sorted.txt | cut -d' ' -f 1`;#get number of lines
while [ $i -lt $lines ];do
    sed -n $i,`echo $i+19 | bc`p sorted.txt > file$num;
    num=`echo $num+1 | bc`;
    i=`echo $i+20 | bc`;
done;
于 2012-09-27T17:07:47.723 に答える
1

範囲と sed を使用せずにファイル (またはフィルター処理された結果) を分割するには、 splitコマンドを使用します。ドキュメントによると、これはうまくいくはずです:

猫ファイル.txt | 分割 -l 20 - PREFIX

これにより、ファイル PREFIXaa、PREFIXab、... (ファイル名に .txt 拡張子が追加されないことに注意してください!)

@Sergeyが説明した方法で、最初にファイルをフィルタリングする場合:

猫ファイル.txt | ソート | 分割 -l 20 - PREFIX

于 2012-09-27T17:20:39.347 に答える