각 행을 구분하지 않고 파일을 동일한 부분으로 분할하려면 어떻게 해야 합니까?
파일을 줄 바꿈 없이 등분(편집: = 마지막을 제외하고 모두 동일)할 수 있을까요?Unix 에서 split 명령어를 사용하면 행이 반으로 분할될 수 있습니다.예를 들어, 파일을 5등분할 수 있지만, 여전히 전체 행으로 구성되는 방법이 있습니까(파일이 조금 크거나 작더라도 문제 없습니다).줄 수만 계산할 수 있지만 bash 스크립트의 많은 파일에 대해 이 작업을 수행해야 합니다.감사합니다!
줄의 수가 같으면 split
에는 다음과 같은 옵션이 있습니다.
split --lines=75
그게 뭔지 알고 싶다면75
을 위한 것이어야 한다N
동일한 부품, 그:
lines_per_part = int(total_lines + N - 1) / N
로 총선을 얻을 수 있습니다.wc -l
.
예에 대해서는, 다음의 스크립트를 참조해 주세요.
#!/usr/bin/bash
# Configuration stuff
fspec=qq.c
num_files=6
# Work out lines per file.
total_lines=$(wc -l <${fspec})
((lines_per_file = (total_lines + num_files - 1) / num_files))
# Split the actual file, maintaining lines.
split --lines=${lines_per_file} ${fspec} xyzzy.
# Debug information
echo "Total lines = ${total_lines}"
echo "Lines per file = ${lines_per_file}"
wc -l xyzzy.*
출력은 다음과 같습니다.
Total lines = 70
Lines per file = 12
12 xyzzy.aa
12 xyzzy.ab
12 xyzzy.ac
12 xyzzy.ad
12 xyzzy.ae
10 xyzzy.af
70 total
의 최신 버전split
의 수를 지정할 수 있습니다.CHUNKS
와 함께-n/--number
선택.따라서 다음과 같은 것을 사용할 수 있습니다.
split --number=l/6 ${fspec} xyzzy.
(그것은ell-slash-six
,의미.lines
,것은 아니다.one-slash-six
).
따라서 중간 줄 분할 없이 파일 크기가 거의 동일합니다.
마지막 포인트는 각 파일의 줄 수가 거의 동일하지 않고 글자 수가 동일하기 때문에 언급합니다.
따라서 1개의 20자 행과 19개의 1자 행(총 20개 행)이 있고 5개의 파일로 분할되어 있는 경우, 대부분의 경우 모든 파일에 4개의 행이 포함되어 있지 않습니다.
스크립트는 필요 없습니다.split (1)은 필요한 기능을 즉시 지원합니다.
split -l 75 auth.log auth.log.
위의 명령어는 파일을 75줄의 청크로 분할하여 다음 형식으로 파일을 출력합니다.auth.log.aa, auth.log.ab, ...
wc -l
다음 정보를 얻을 수 있습니다.
321 auth.log
75 auth.log.aa
75 auth.log.ab
75 auth.log.ac
75 auth.log.ad
21 auth.log.ae
642 total
간단한 질문에 대한 간단한 솔루션:
split -n l/5 your_file.txt
여기서 설명하지 않아도 됩니다.
맨 파일에서CHUNKS may be:
l/N split into N files without splitting lines
갱신하다
모든 unix dist에 이 플래그가 포함되어 있는 것은 아닙니다.예를 들어 OSX에서는 동작하지 않습니다.이를 사용하기 위해 Mac OS X 유틸리티를 GNU 코어 유틸리티로 교체하는 것을 고려할 수 있습니다.
split은 특정 개수의 파일을 생성하기 위해 --number 옵션을 사용하여 coreutils 릴리스 8.8(2010년 12월 22일 발표)에서 업데이트되었습니다.--number=l/n 옵션은 행을 분할하지 않고 n개의 파일을 생성합니다.
여러 부분을 입력으로 주고 파일을 분할하는 bash 스크립트를 만들었습니다.
#!/bin/sh
parts_total="$2";
input="$1";
parts=$((parts_total))
for i in $(seq 0 $((parts_total-2))); do
lines=$(wc -l "$input" | cut -f 1 -d" ")
#n is rounded, 1.3 to 2, 1.6 to 2, 1 to 1
n=$(awk -v lines=$lines -v parts=$parts 'BEGIN {
n = lines/parts;
rounded = sprintf("%.0f", n);
if(n>rounded){
print rounded + 1;
}else{
print rounded;
}
}');
head -$n "$input" > split${i}
tail -$((lines-n)) "$input" > .tmp${i}
input=".tmp${i}"
parts=$((parts-1));
done
mv .tmp$((parts_total-2)) split$((parts_total-1))
rm .tmp*
하였습니다.head
★★★★★★★★★★★★★★★★★」tail
및 파일에 tmp 파일)
#10 means 10 parts
sh mysplitXparts.sh input_file 10
또는 awk를 사용하여 0.1은 10% => 10 parts 또는 0.334는 3 parts입니다.
awk -v size=$(wc -l < input) -v perc=0.1 '{
nfile = int(NR/(size*perc));
if(nfile >= 1/perc){
nfile--;
}
print > "split_"nfile
}' input
var dict = File.ReadLines("test.txt")
.Where(line => !string.IsNullOrWhitespace(line))
.Select(line => line.Split(new char[] { '=' }, 2, 0))
.ToDictionary(parts => parts[0], parts => parts[1]);
or
enter code here
line="to=xxx@gmail.com=yyy@yahoo.co.in";
string[] tokens = line.Split(new char[] { '=' }, 2, 0);
ans:
tokens[0]=to
token[1]=xxx@gmail.com=yyy@yahoo.co.in"
언급URL : https://stackoverflow.com/questions/7764755/how-to-split-a-file-into-equal-parts-without-breaking-individual-lines
'source' 카테고리의 다른 글
Excel에서 셀의 첫 번째 문자를 다른 셀과 결합하려면 어떻게 해야 합니까? (0) | 2023.04.14 |
---|---|
큰 xlsx 파일에서 판다 DataFrame을 로드하기 위한 진행 표시줄을 만들려면 어떻게 해야 합니까? (0) | 2023.04.14 |
콘텐츠에 대한 WPF 컨트롤 크기 (0) | 2023.04.14 |
Nullable 열을 NOT NULL(기본값)로 변경합니다. (0) | 2023.04.14 |
MVVM을 사용하는 wpf의 대화상자에 대한 바람직한 방법 또는 나쁜 방법? (0) | 2023.04.14 |