Não sei se entendo o que quero alcançar, mas talvez esse programa awk
seja útil para você:
Conteúdo de script.awk
:
{
## Number of blocks printed to output.
block = 0
## Get number of columns searching how many tabs exists in the line.
## I substract one because each line has a tab at the end and splits
## function count blank space after it like a new column.
col_nums = split( $0, dummy, /\t+/ )
--col_nums
## Incorrect line if it has not any tab. Omit it.
if ( col_nums < 1 ) {
next
}
## Get number of chars of each block to output.
## 'max_cell_length' is an input argument provided by the user. It means
## number of chars to input by line.
chars = max_cell_length / col_nums
## For each column...
for ( i = 1; i <= NF; i++ ) {
## This is the index where I begin to extract a substring. Zero is
## at first char.
begin_idx = 0
## Get for each column blocks of 'chars' characters. And repeat until
## end of column.
while ( begin_idx < length( $i ) ) {
column = substr( $i, begin_idx, chars )
## Increment index to extract next block where last one ended.
begin_idx += chars
## Print block to output.
printf "%s ", column
## When have been printed number of columns indicated by the
## user, change to next line.
if ( ++block % col_nums == 0 ) {
printf "\n"
}
}
}
}
{
## For each line, print an extra newline for a pretty output.
printf "\n"
}
Executando o script:
python3 -c 'for i in (1,2,3): print(((str(i)*50)+"\t")*3)' | awk -v max_cell_length=30 -f script.awk -
E resultado:
1111111111 1111111111 1111111111
1111111111 1111111111 1111111111
1111111111 1111111111 1111111111
1111111111 1111111111 1111111111
1111111111 1111111111 1111111111
2222222222 2222222222 2222222222
2222222222 2222222222 2222222222
2222222222 2222222222 2222222222
2222222222 2222222222 2222222222
2222222222 2222222222 2222222222
3333333333 3333333333 3333333333
3333333333 3333333333 3333333333
3333333333 3333333333 3333333333
3333333333 3333333333 3333333333
3333333333 3333333333 3333333333
Você pode usar a variável max_cell_length
para indicar o número de caracteres por linha de saída (sem bancos), e suponho que seja um fator de número de caracteres nos dados originais. Caso contrário, a saída será mal formatada, testei-a com 30
, como você pode ver nesta postagem e com 50
. Ambos parecem corretos, mas não com muitos outros números estranhos.