Com bash
e cut
:
#! /usr/bin/env bash
for i in {0..9}; do
let start=i*100+1
let end=i*100+100
cut -d ' ' -f ${start}-${end} file.txt >file_$i.txt
done
Como imprimir cada 100 colunas de um arquivo com 1000 colunas em 10 arquivos diferentes?
O comando split
é usado para dividir as linhas em arquivos diferentes. Estou procurando colunas em arquivos diferentes.
Se o arquivo não for muito grande, uma opção pode ser transpor, dividir e, em seguida, transpor o resultado. se você tem o GNU split
com a opção --filter
rs -T < somefile | split -l100 --filter='rs -T > $FILE'
Ilustrando com uma entrada de tamanho mais gerenciável
$ printf 'A B C D E F G H I J\n0 1 2 3 4 5 6 7 8 9\na b c d e f g h i j\n' |
rs -T | split -l2 --filter='rs -T > $FILE'
Então
$ cat xaa
A B
0 1
a b
$ cat xae
I J
8 9
i j
Usando awk
sozinho.
awk '{i=0; split($0, arry, / +/);
for (x in arry) {
if ((x%100)==1)i++; printf (x%100)?arry[x]FS:arry[x]"\n" >"FILE_"i
}
}' in_multiple_files
Entrada simples de 40 colunas e com x%10
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 c16 c17 c18 c19 c20 c21 c22 c23 c24 c25 c26 c27 c28 c29 c30 c31 c32 c33 c34 c35 c36 c37 c38 c39 c40
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z AA AB AC AD AE AF AG AH AI AJ AK AL AM AN
Resultado em 4 arquivos.
==> FILE_1 <==
1 2 3 4 5 6 7 8 9 10
c1 c2 c3 c4 c5 c6 c7 c8 c9 c10
A B C D E F G H I J
==> FILE_2 <==
11 12 13 14 15 16 17 18 19 20
c11 c12 c13 c14 c15 c16 c17 c18 c19 c20
K L M N O P Q R S T
==> FILE_3 <==
21 22 23 24 25 26 27 28 29 30
c21 c22 c23 c24 c25 c26 c27 c28 c29 c30
U V W X Y Z AA AB AC AD
==> FILE_4 <==
31 32 33 34 35 36 37 38 39 40
c31 c32 c33 c34 c35 c36 c37 c38 c39 c40
AE AF AG AH AI AJ AK AL AM AN
Awk :
awk -v n=100 '{ r="";
for(i=1;i<=NF;i++) {
f=sprintf("%s%s",$i,(!(i%n))?"":OFS);
r=(r!="")? r OFS f : f;
if (!(i%n)) { print r > FILENAME"_"++c; r="" }
}
c=0 }' file
-v n=100
- coeficiente de divisão ajustável
r=""
- string resultante inicializada
!(i%n)
- determinando o momento em que o registro deve ser dividido no múltiplo do número do campo do coeficiente n
Tags text-processing split