for*_*sck 18
下面的命令适用于 50% 以上的百分比(如果你只想拆分成两个文件),快速和肮脏的方法。
1) 根据行分割 70%
split -l $[ $(wc -l filename|cut -d" " -f1) * 70 / 100 ] filename
Run Code Online (Sandbox Code Playgroud)
2) 根据字节拆分 70%
split -b $[ $(wc -c filename|cut -d" " -f1) * 70 / 100 ] filename
Run Code Online (Sandbox Code Playgroud)
您可以使用csplit
分成两部分(使用任何百分比),例如第一部分 - 前 20% 的行,第二部分 - 其余 80% 的行:
csplit infile $(( $(wc -l < infile) * 2 / 10 + 1))
Run Code Online (Sandbox Code Playgroud)
$(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
Run Code Online (Sandbox Code Playgroud)
或者,甚至更酷:
{ head -n$(( $(wc -l < infile) * 2 / 10)) > 20-infile; cat > 80-infile; } <infile
Run Code Online (Sandbox Code Playgroud)
尽管有些head
是愚蠢的并且不符合标准,因此这不适用于所有设置...