如何使用每行打印字符限制的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开始。
贝壳
bash
和ksh
实现这一目标的方法是:
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()
允许我们将字符串列表再次组合成一个换行符作为分隔符。