Eu tenho um arquivo de dados parecido com:
1
2 4 5 6 7 19
20
22
24 26 27
29 30 31 32 34 40 50 56 58
234 235 270 500
1234 1235 1236 1237
2300
Quero dividir essas linhas com mais de 4 colunas em linhas menores com no máximo 4 colunas em cada linha. portanto a saída deve ser:
1
2 4 5 6
7 19
20
22
24 26 27
29 30 31 32
34 40 50 56
58
234 235 270 500
1234 1235 1236 1237
2300
Alguma sugestão, por favor? Por favor, considere que meu arquivo de dados real é enorme.
Responder1
Com awk
:
awk '{ if(NF>4) for(i=5; i<=NF; i+=4) $i = "\n" $i } 1' file
Com sed
:
sed 's/ /\n/4;T;P;D' file
Com perl
:
perl -lpe '$c = 0; s/ /++$c % 4 ? " " : "\n"/goe' file
Saída:
1
2 4 5 6
7 19
20
22
24 26 27
29 30 31 32
34 40 50 56
58
234 235 270 500
1234 1235 1236 1237
2300
Responder2
A abordagem mais fácil seria um método de mesclagem tardia ou zíper. Suponha que o último caractere de cada linha seja um espaço em branco. Primeiro divida seu arquivo em dois, de acordo com as colunas que deseja cortar.
cut -d' ' -f1-4 file > file1
cut -d' ' -f5- file > file2
Em segundo lugar, mescle os arquivos por meio da mesclagem tardia e exclua as linhas vazias.
paste -d'\n' file1 file2 | sed '/^$/d'