如何使用每行打印字符限制的cat文件?

我想cat文件,但每条线的最大长度限制。 例如,我有一个10行的文件,每行有10000个字符,我想从每行打印前100个字符。 有可能用猫或其他替代品吗? 谢谢。

使用cut工具,您可以将输出限制为100.因为您只对characters感兴趣,因此它们占用的列应该很好地执行:

 cut -c-100 file 

如果你想删除那里的空格,这将有助于:

 sed 's/ //g' file | cut -c-100 

见: man cut

使用awk

 awk '{ print substr( $0, 0, 100 ) }' file 

如果需要,再次摆脱空间:

 awk '{ gsub (" ", "", $0); print substr( $0, 0, 100 ) }' file 

AWK

gsub (" ", "", $0) :找到" " (空格)并在目标字符串$0全局替换为""

substr( $0, 0, 100 ) :它从字符串$ 0返回100个字符,从位置0开始。

贝壳

bashksh实现这一目标的方法是:

 while IFS= read -r line || [ -n "$line" ];do printf "%s\n" "${line:0:100}"; done < input.txt 

这里我们利用${parameter:start:offset}forms的参数扩展来从起点到偏移打印。 应该注意,这不是由POSIX指定的,并且在dash不起作用(Ubuntu上的默认/bin/sh )。

Perl的

 perl -ne 'printf "%s\n",substr($_,0,100)' input.txt 

这利用了内置的substr函数。

python

python是Ubuntu上的Python 2.7:

 python -c 'import sys; print "\n".join(map(lambda x: x[:100],sys.stdin.readlines()))' < input.txt 

对于python3,将参数括起来用大括号print

 python3 -c 'import sys; print("\n".join(map(lambda x: x[:100],sys.stdin.readlines())))' < input.txt 

这利用了shell将文件内容重定向到python的stdin流中,然后将所有行从stdin读入列表中。 map()函数允许我们通过lambda x: x[:100]处理该列表,获得一个新列表,其中每个项目是每个对应行的一个切片,长度为100个字符。 "\n".join()允许我们将字符串列表再次组合成一个换行符作为分隔符。