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システムのデフォルト値であるsplit
GNUで使用できます。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