如何对文件进行 cat ,限制每行打印的字符数?

如何对文件进行 cat ,限制每行打印的字符数?

我想 cat 文件,但每行的最大长度有限制。例如,我有一个文件,有 10 行,每行有 10000 个字符,我想打印每行的前 100 个字符。cat 能做到类似的事情吗?或者还有其他方法吗?谢谢。

答案1

使用该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

大王

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

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

答案2

bash实现这一目标的方法ksh是:

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

这里我们利用表单中的参数扩展${parameter:start:offset} 来打印从起点到偏移量的数据。需要注意的是,这POSIX 没有指定dash并且在(Ubuntu 的默认设置)中不起作用/bin/sh

Perl

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

这利用了内置的子串功能。

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()让我们将字符串列表再次合并为一个,并使用换行符作为分隔符。

相关内容