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
앞에 0이 필요하지 않으면 이름을 바꿀 수 있습니다.
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