我的数据存储在磁盘上的文件太大,无法存储在主内存中。如何执行流式字符转换?
我想从磁盘此数据通过iconv
流划分成数据处理管道,就像这样:不幸的是
zcat myfile | iconv -f L1 -t UTF-8 | # rest of the pipeline goes here
,我看到的iconv在内存中缓冲整个文件,直到它的输出任何之前耗尽数据。这意味着我将所有的主内存用于管道中的阻塞操作,其内存占用空间最小。
我打过电话的iconv这样的:
stdbuf -o 0 iconv -f L1 -t UTF-8
但它看起来像的iconv内部自身管理的缓冲 - 这是没有任何与Linux管道缓冲区。
我在Arch Linux中看到与gblic 2.6和2.7一起打包的二进制文件,我在Debian中用glibc 2.5描述了它。
有没有办法解决这个问题?我知道流式字符转换并不简单,但我一直认为这种常用的unix工具可以在流中工作;处理不适合主内存的文件并不罕见。我是否必须将自己的二进制文件链接到libiconv
?
我应该把这个问题放在unix堆栈交换上吗?无论如何,解决方案是使用'recode'命令(gnu.org/software/recode),它可以在数据流出时进行流式处理。 – Cera