ファイルを改行記号で区切って複数の小さなファイルに分割します。

ファイルを改行記号で区切って複数の小さなファイルに分割します。

改行記号でファイルを分割するユーティリティはありますか?例えば、ファイルに次の行が含まれている場合、

aa
bbb
cccc

これを 3 つのファイルに分割する場合、望ましい出力は次のようになります。

aabbbそしてcccc(3つの異なるファイル)

すでにsplitコマンドを確認しましたが、ファイルサイズによってファイルがカットされるだけで、私が望んでいるものではありません。

自分でユーティリティを作成していない場合、使用できる標準ツールはありますか?

答え1

何か見落としていない限り、 switch をsplit使用すると行ごとに分割されます-l

   -l, --lines=NUMBER
          put NUMBER lines per output file

それで

split -l 1 inputfile

あなたがしたいことをすればいいのです。

答え2

awk '{print > $0".txt" }'  inputfile

入力ファイル内の一意の行ごとに、行の内容にちなんで名付けられたファイル (拡張子付き.txt) が 1 つ作成されます。ただし、同時に開くファイルの制限に達すると、一部の実装が失敗することに注意してくださいawk

または

awk '{f = "output_file." NR; print $0 > f; close(f)}' inputfile

出力ファイルに番号を付けます。

答え3

A=0
while IFS= read -r LINE ; do
  printf '%s\n' "$LINE" > newfile$A
  (( A++ ))
done < "$INPUTFILE"

関連情報