単一ファイルの範囲を繰り返しコピーして新しいファイルに貼り付ける

単一ファイルの範囲を繰り返しコピーして新しいファイルに貼り付ける

10023行を含むファイルがあります。ファイルから1000行ごとにコピーして、1.txtや2.txtなどの名前の新しいファイルに貼り付けたいです。 1.txt 2.txtなどのファイルを新しく作成されたフォルダ1、2などに移動したいと思います。

誰でも助けることができますか?

ありがとう

答え1

それがsplit目的です。ファイルを1000行(最後の行の場合はそれ以下)の複数のファイルに分割するには、次のようにします。

split -d -l 1000 file '' 

これにより、ファイルは追加の接尾辞-l 1000として数字の接尾辞.txtと空の接頭辞('')を含むそれぞれ1000行()のファイルに分割されます。 10023行を含むファイルの結果は00、、、...、という名前の11個の01ファイルになります10

$ wc -l file
10023 file
$ split -d -l 1000 --additional-suffix='.txt' file ''
$ ls
00.txt  02.txt  04.txt  06.txt  08.txt  10.txt
01.txt  03.txt  05.txt  07.txt  09.txt  file

は移植可能で-dはなく、--additional-suffixお使いのシステムでは機能しない可能性があります。これは、Linuxシステムのデフォルト値であるsplitGNUで使用できます。split

これで、必要に応じてファイルを移動できます。

for i in {00..10}; do
    mkdir -p $i
    mv "$i".txt "$i"/
done

前にゼロが必要ない場合は、名前を変更できます。

for i in {00..10}; do
    mkdir -p $i
    mv "$i".txt "$i"/"${i##0}".txt
done

最後に、GNU を想定して 0 ではなく 1 から始めるには、split次のようにします。

split -d --numeric-suffixes=1 -l 1000 --additional-suffix='.txt' file ''

これで以下が生成されます。

01.txt  03.txt  05.txt  07.txt  09.txt  11.txt
02.txt  04.txt  06.txt  08.txt  10.txt 

答え2

入力ファイル名が次のと仮定すると、(テストされていない)このような操作が実行されますChrom

awk '
(NR % 1000) == 1 {
    close(out)
    if ( system("mkdir -p \047" (++cnt) "\047") != 0 ) {
        print "Failed to create directory " cnt |"cat>&2"
        exit 1
    }
    out = cnt "/" FILENAME
}
{ print > out }
' Chrom

これにより、次の出力ディレクトリ/ファイルが作成されます。

1/Chrom   2/Chrom   3/Chrom   etc.

ディレクトリ名とファイル名の両方を一意にしたい場合は、単純な調整(FILENAMEに変更cnt ".txt")するだけですが、これは重複しているようです。

答え3

itertoolsモジュールアプローチを使用してislice入力ファイルハンドルイテレータをチャンクし、ファイルを目的のディレクトリに保存して作成します。

$ python3 -c 'import sys, pathlib, itertools
ifile,chunk_size = sys.argv[1:]
with open(ifile) as fh:
  for i,chunk in enumerate(iter(lambda:list(itertools.islice(fh,int(chunk_size))),[])):
    filepath = pathlib.Path(f"{i}/{i}.txt") 
    filepath.parent.mkdir(parents=True,exist_ok=True)
    with filepath.open("w") as f:
      f.writelines(chunk)
' file 1000
$ tree -F

出力:

.
├── 1/
│   └── 1.txt
├── 10/
│   └── 10.txt
├── 11/
│   └── 11.txt
├── 2/
│   └── 2.txt
├── 3/
│   └── 3.txt
├── 4/
│   └── 4.txt
├── 5/
│   └── 5.txt
├── 6/
│   └── 6.txt
├── 7/
│   └── 7.txt
├── 8/
│   └── 8.txt
├── 9/
│   └── 9.txt
├── file

関連情報