7

大きなファイル (〜 17M 行の文字列) を、各チャンクの行数が異なる複数のファイルに分割したいと考えています。次のように「split -lコマンドに配列を送信することは可能でしょうか:

[
 1=>1000000,
 2=>1000537,
 ...
]

それらの多くの行を各チャンクに送信するように

4

3 に答える 3

11

複合コマンドを使用します。

{
  head -n 10000 > output1
  head -n   200 > output2
  head -n  1234 > output3
  cat > remainder
} < yourbigfile

これはループでも機能します。

{
  i=1
  for n in 10000 200 1234
  do
      head -n $n > output$i
      let i++
  done
  cat > remainder
} < yourbigfile

headこれは、追加の出力を読み取って破棄するOS X では機能しません。

于 2013-02-05T23:13:20.917 に答える
1

sed別のスクリプトを取得してsedコマンドを生成することで使用できます。

# split_gen.py
use strict;
my @limits = ( 100, 250, 340,999);
my $filename = "joker";

my $start = 1;
foreach my $end (@limits) {
    print qq{sed -n '$start,${end}p;${end}q' $filename > $filename.$start-$end\n};
    $start = $end + 1;
}

次のように実行しますperl split_gen.py

sed -n '1,100p;100q' joker > joker.1-100
sed -n '101,250p;250q' joker > joker.101-250
sed -n '251,340p;340q' joker > joker.251-340
sed -n '341,999p;999q' joker > joker.341-999

コマンドに満足している場合は、次のことができます

perl split_gen.py | sh 

大きなファイルでは遅くなる可能性があるため、待機を楽しんでください。

于 2013-02-05T22:58:10.193 に答える
1

このsplitコマンドにはその機能がないため、別のツールを使用するか、独自のツールを作成する必要があります。

于 2013-02-05T22:18:33.910 に答える