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