我使用python从路由器和交换机屏蔽大量文本,并使用script记录会话。通常我会使用以下内容清理script个会话:
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
来解决这个问题,但现在我正在创建许多小文件并在每个文件上执行col
。作为一个长镜头,我尝试缓冲mbuffer(mbuffer -s 8192
)和stdbuf,但那些显然无助于这种情况。
是否有:
1 我的系统至少有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 我意识到我可以split进入/dev/shm
以消除一些磁盘延迟,但如果可能,我想完全避免使用split。子>
答案 0 :(得分:2)
这是col
中的错误。 (我已将它的价值报告给FreeBSD和Debian(也应该适用于Ubuntu);随意将报告广播到其他可能拥有自己的源存储库的发行版中)。
据我所知,该错误存在于col
实用程序的所有常用版本中,甚至是OpenBSD版本。
错误报告中有一个简单的修复方法,即将c_column
的声明从short
更改为int
。我通过下载debian util-linux
source package 1 进行了测试,然后使用以下命令编译它(在ubuntu
系统上),从目录开始我下载了tarball:
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
选项报告其版本字符串