How to cat file with limit of printed characters from each line?

I would like to cat file, but with limit to max length to each line. For example I a have file with 10 lines each have 10000 characters and I would like to print first 100 characters from each line. Is something like that possible with cat or some alternative? thx.


Solution 1:

With the cut tool you can limit the output to 100. Since you only interested in the characters hence the columns they occupy this should do that nicely:

cut -c-100 file

In case you wish to remove the spaces in there this would help:

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

See: man cut

Using awk:

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

Getting rid of spaces again if required:

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

AWK:

gsub (" ", "", $0): find " "(spaces) and replace with "" globally in target string $0.

substr( $0, 0, 100 ): it returns 100 number of chars from string $0, starting at position 0.

Solution 2:

Shell

bash and ksh way to achieve this would be:

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

Here we take advantage of parameter expansion in form ${parameter:start:offset} to print from starting point till offset. Should be noted that this isn't specified by POSIX and doesn't work in dash ( the default /bin/sh on Ubuntu).

Perl

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

This takes advantage of built-in substr function.

Python

python is Python 2.7 on Ubuntu:

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

For python3, enclose arguments to print with braces:

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

This takes advantage of shell's redirection for file's contents into python's stdin stream, then reads all lines into list from the stdin,. The map() function allows us to process that list via lambda x: x[:100], obtaining a new list, where each item is a slice of each corresponding line, 100 characters long. "\n".join() lets us combine the list of strings into one again with newline as separator.