split 명령을 사용하여 텍스트 파일을 70 % 및 30 %로 분할하려면 어떻게해야합니까?
split 명령을 사용하여 텍스트 파일을 70 % 및 30 %로 분할하려면 어떻게해야합니까?
답변:
아래의 명령은 50 % 이상의 백분율 (두 파일로만 분할하려는 경우)에 대해 작동합니다.
1) 라인을 기준으로 70 % 분할
split -l $[ $(wc -l filename|cut -d" " -f1) * 70 / 100 ] filename
2) 바이트를 기준으로 70 % 분할
split -b $[ $(wc -c filename|cut -d" " -f1) * 70 / 100 ] filename
split -l $[ $(wc -l filename | xargs | cut -d" " -f1) * 70 / 100 ] filename
csplit
첫 번째 조각-첫 번째 20 % 선, 두 번째 조각-나머지 80 % 선으로 두 조각으로 나눌 수 있습니다 (예 : 백분율을 사용).
csplit infile $(( $(wc -l < infile) * 2 / 10 + 1))
$(wc -l < infile)
: 총 줄 수
2 / 10
: 백분율
+1
: csplit
나누기 때문에 한 줄 추가up to but not including line N
그래도 선을 기준으로 만 분할 할 수 있습니다.
기본적으로 줄 번호가있는 한 줄 $(( $(wc -l < file) * 2 / 10))
중심 도구를 사용할 수 있습니다.
sed 1,$(( $(wc -l < infile) * 2 / 10))'{
w 20-infile
d
}' infile > 80-infile
또는 심지어 더 시원합니다.
{ head -n$(( $(wc -l < infile) * 2 / 10)) > 20-infile; cat > 80-infile; } <infile
일부 head
는 멍청하고 표준을 준수 하지 않으므로 모든 설정에서 작동하지는 않습니다 ...
{ BS=$(($(wc -c <file) * $P / 100))
dd count=1 bs="$BS" >file1; cat
} <file >file2 2>/dev/null
... 한 번만 나누기 때문에이 간단한 경우에 효과가 있어야합니다 split
. 아마도 약간 과잉 일 것 입니다. 그래서 긴 파일이 시크 한, dd
단 하나 할 것입니다 read()
에를 <stdin
너무하고 cat
그것을 시작하기 위해 남아있는 read()
어떤 점에서 dd
그것은 잎.
파일이 크면 count=1 bs=$big_ol_num
약간 다루기 어려울 수 있으며 추가-간단한 쉘 수학으로 차단 될 수 있습니다.
파이프에서와 같이 검색 할 수없는 입력이 왜곡 될 수 있음 dd
'이 / GNU W : 음으로 처리 할 수 있지만,의 결과 dd
들' iflag=fullblock
.