我使用python来屏蔽从路由器和交换机中的大量文本,并用脚本logging会话。 通常我用以下方法清理脚本会话:
touch a_clean_script_file.txt; col -bx <a_script_file.tmp > a_clean_script_file.txt
由于我不想涉及的原因,我发现了一个问题。 col每行的最大限制为32KB 1 :
[mpenning@hostname tmp]$ ### 128KB characters, using normal shell pipes [mpenning@hostname tmp]$ printf 'z%.0s' {1..131072} | wc -c 131072 [mpenning@hostname tmp]$ ### 128KB characters, using col (limited to 32KB) <---- [mpenning@hostname tmp]$ printf 'z%.0s' {1..131072} | col -bx | wc -c 32769 [mpenning@hostname tmp]$
很明显,我可以使用split -b
来解决这个问题,但是现在我正在创build许多小文件,并在其中的每一个上执行。 作为一个长期的尝试,我尝试了通过mbuffer ( mbuffer -s 8192
)和stdbuf缓冲 ,但是这些显然没有帮助。
有没有:
1 至less在我的系统上是32KB, uname -a
Linux hostname 2.6.32-431.1.2.0.1.el6.x86_64 #1 SMP Fri Dec 13 13:06:13 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
2 我意识到我可以拆分成/dev/shm
来消除一些磁盘延迟,但是如果可能的话,我想尽量避免拆分 。
这是一个错误的col
。 (我已经向FreeBSD和Debian报告过 (这也应该适用于Ubuntu);随意将报告广播给其他可能有自己的源代码库的发行版)。
据我所知,这个bug在所有常用版本的col
工具,甚至是OpenBSD版本中都有。
bug报告中有一个简单的修复, c_column
的声明从short
更改为int
。 我通过下载debian util-linux
源码包 1来测试 ,然后使用下面的命令编译它(在ubuntu
系统上),从我下载tar包的目录开始:
tar xf util-linux_2.20.1.orig.tar.gz cd util-linux_2.20.1 CPPFLAGS=-I/usr/include/ncursesw ./configure cd text-utils # edit line 81 of text-utils/col.c, s/short/int/ make col
1 为了什么是值得的,我以后才发现这不是debian col
工具的来源; 我看到的主要区别是这个报告它的版本字符串与-V
选项