我正在我的ubuntu上执行下一个语句:
split --number=l/5 /pathToSource.csv /pathToOutputDirectory
如果我做"ls"
myUser@serverNAme:/pathToOutputDirectory> ls -la
total 21467452
drwxr-xr-x 2 myUser group 4096 Jun 23 08:51 .
drwxrwxrwx 4 myUser group 4096 Jun 23 08:44 ..
-rw-r--r-- 1 myUser group 10353843231 Jun 23 08:48 aa
-rw-r--r-- 1 myUser group 0 Jun 23 08:48 ab
-rw-r--r-- 1 myUser group 11376663825 Jun 23 08:51 ac
-rw-r--r-- 1 myUser group 0 Jun 23 08:51 ad
-rw-r--r-- 1 myUser group 252141913 Jun 23 08:51 ae
如果我在ab和ad文件上做一个"du"。
$du -h ab ad
0 ab
0 ad
正如您所看到的,split以非齐次形式分割文件。有人知道发生了什么事吗?一些无法打印的字符可以挂拆分吗?非常感谢。顺致敬意,弗朗西斯科。
虽然这是一个不寻常的数据,平均行长度为114137,但我不确定这是否能完全描述这个问题。嗯,你有21982648969的数据=>拆分试图填充的每个bucket是4396529793。这比2^32大。我想知道我们是否有32位溢出。您使用的是32位平台还是64位平台?查看代码,我没有看到溢出问题TBH。请注意,您可以匿名并压缩数据,提供以下文件供下载:
tr -c 'n' . < /pathToSource.csv | xz > /pathToSource.csv.xz
由于实现在v8.8和v8.13之间发生了一些变化,因此还值得指定版本。
groovy中的一个解决方案:
class Sanitizer {
public static void main(String[] args) {
def textOnly = new File('/path/NoDanger.txt')
def data = new File('/path/danger.txt')
String line = null
data.withReader { reader ->
while ( ( line = reader.readLine() ) != null ){
/*char[] stringToCharArray = line.toCharArray();
for(int i = 0; i < 5; i++ ){
char a = stringToCharArray[i]
int b = Character.getNumericValue(a);
println Integer.toHexString(b)
if (!(b =~ /w/)) {
println "inside"
} else println "outside"
}*/
String newString = line.replaceAll("[^\p{Print}]", "");
textOnly << newString+"n"
}
} //reader
}
}