luizsouza99
(usa Linux Mint)
Enviado em 27/09/2014 - 01:33h
Não é um comando, mas um script que faz o que você precisa.
Pegue as 333 mil linhas e divida para 111 arquivos que dará 3000 linhas cada um:
#!/bin/bash
mkdir $HOME/temp
UM=$"1"
DOI=$"3000"
VOLTA=$"0"
while [ $VOLTA -lt 111 ];do
VOLTA=$[$VOLTA+1]
# cria os arquivos de 1 a 111 já com as 3000 linhas escritas
cat seu_arquivo | sed -n ${UM},${DOIS}p > $VOLTA
# atualizando os valores das linhas
UM=$[$UM+3000]
DOIS=$[$DOIS+3000]
done
Agora ele pega as 10 primeiras linhas de cada um dos 111 arquivos e joga em outro arquivo, depois disto é só aplicar o seu comando, para ficar na ordem correta o seu comando deve criar 111 colunas com 10 linhas.
# tratando os dados de 10 em 10 na ordem
TRES=$"1"
QUATRO=$"10"
echo > $HOME/permanente
echo > $HOME/temporario
# este loop faz o proximo loop escrever todas as linhas (rodando 300 vezes)
VOLTA_MEDIA=$"0"
while [ $VOLTA_MEDIA -lt 300 ];do
VOLTA_MEDIA=$[$VOLTA_MEDIA+1]
VOLTA2=$"0"
while [ $VOLTA2 -lt 111 ];do
VOLTA2=$[$VOLTA2+1]
# lê os arquivos de 1 a 111 e ordenando de 10 em 10
cat $HOME/temp/$VOLTA2 | sed -n ${TRES},${QUATRO}p >> $HOME/temporario
# atualizando os valores das linhas
TRES=$[$TRES+10]
QUATRO=$[$QUATRO+10]
done
# terminou de escrever, agora ele deve criar um arquivo com 111 colunas tendo 10 linhas e adicionando 10 linhas a cada rodada
# aplicando o seu comando, coloquei o endereço do arquivo temporário no lugar de FILE
awk '{ORS=(NR%3?FS:RS)}1' $HOME/temporário >> $HOME/permanente
done
Com este esquema nós conseguimos mastigar as 333 mil linhas para o computador dar conta, nós dividimos em 111 arquivos para que na hora de ordenar as linhas elas fiquem na mesma ordem em que ficariam quando você dá o comando puro.
Não testei o script, mas a lógica é esta, dá uma analisada nas linhas do script e veja se está compatível com a sua realidade, se tiver algum erro pode ser erro de sintax ou conta matematica errada, dá uma olhada, mas repito a lógica é esta.
Feedback hein cara, rsrs