拆分:如何拆分成不同的百分比?

ane*_*yzm 16 split

如何使用 split 命令将文本文件拆分为 70% 和 30%?

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)

  • 在 MacOSX 上 wc 有时会返回前面带有空格的行数,这会破坏此脚本。第一个管道到 xargs 将删除这些空格并使事情再次工作:`split -l $[ $(wc -l filename | xargs | cut -d" " -f1) * 70 / 100 ] filename` (2认同)

don*_*sti 5

您可以使用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是愚蠢的并且不符合标准,因此这不适用于所有设置...