Looping Simultaneo [RESOLVIDO]

1. Looping Simultaneo [RESOLVIDO]

Marcelo Matos
zwe

(usa Ubuntu)

Enviado em 20/10/2016 - 12:16h

Caros;

Tenho uma lista de arquivos (140 mil) arquivos com data em timestamp. Preciso converter cada arquivo para a data real dele, alterando o arquivo com esta data real. Exemplo: 1475279740.15044_xxx.xxx.stats, onde o timestamp é 1475279740, convertendo dá 2016-09-30 (2016-09-30_xxx.xxx.stats). Já tenho a lista de arquivos em timestemp e outra lista já convertida, ambas em txt. Porem, preciso alterar/mover o arquivo que contém o timestemp para os arquivos convertidos. Imagino ter dois (For) onde um abre a lista de arquivos timestamp e outro for que abre os arquivos convertidos e após isso só alterar/mover com um simples mv/sed etc

Para testar (sem mover, apenas printar na tela), criei estes dois "For", porem apenas a segunda variável é alterada em sequencia, a primeira fica estatica. Segue o código de exemplo:

for x in $(cat timestemp.txt)
do
for y in $(cat timestemp-conv.txt)
do

echo $x convertido para $y

done
done

Saida do codigo

1474566212 convertido para 2016-09-24
1474566212 convertido para 2016-09-24
1474566212 convertido para 2016-09-24
1474566212 convertido para 2016-09-24
1474566212 convertido para 2016-09-24
1474566212 convertido para 2016-09-24
1474566212 convertido para 2016-09-24
1474566212 convertido para 2016-09-24
1474566212 convertido para 2016-09-24
1474566212 convertido para 2016-09-24
1474566212 convertido para 2016-09-24
1474566212 convertido para 2016-09-25
1474566212 convertido para 2016-09-25

Caso funcionasse, eu alteraria o echo para um mv, por exemplo: mv $x_xxx.xxx.stats $y_xxx.xxx.stats

Alguém sabe resolver este problema?

Grato em quem puder ajudar.



  


2. MELHOR RESPOSTA

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 20/10/2016 - 14:33h

zwe escreveu:

Caros;

Tenho uma lista de arquivos (140 mil) arquivos com data em timestamp. Preciso converter cada arquivo para a data real dele, alterando o arquivo com esta data real. Exemplo: 1475279740.15044_xxx.xxx.stats, onde o timestamp é 1475279740, convertendo dá 2016-09-30 (2016-09-30_xxx.xxx.stats). Já tenho a lista de arquivos em timestemp e outra lista já convertida, ambas em txt. Porem, preciso alterar/mover o arquivo que contém o timestemp para os arquivos convertidos. Imagino ter dois (For) onde um abre a lista de arquivos timestamp e outro for que abre os arquivos convertidos e após isso só alterar/mover com um simples mv/sed etc

Para testar (sem mover, apenas printar na tela), criei estes dois "For", porem apenas a segunda variável é alterada em sequencia, a primeira fica estatica. Segue o código de exemplo:

for x in $(cat timestemp.txt)
do
for y in $(cat timestemp-conv.txt)
do

echo $x convertido para $y

done
done

Saida do codigo

1474566212 convertido para 2016-09-24
. . .

Caso funcionasse, eu alteraria o echo para um mv, por exemplo: mv $x_xxx.xxx.stats $y_xxx.xxx.stats
Alguém sabe resolver este problema?
Grato em quem puder ajudar.


Boa tarde "ZWE".
Segue o SCRIPT, Testado e Funcionando . . .
Só não testei com 140.000 arquivos . . . :)


#!/bin/bash
ARQ01="timestemp.txt"
ARQ02="timestemp-conv.txt"
NR01=$(awk END'{print NR}' "$ARQ01")
NR02=$(awk END'{print NR}' "$ARQ02")
((NR01 != NR02 )) && { echo -e "$ARQ01 = $NR01 LINHAS\n$ARQ02 = $NR02 LINHAS\nNº de LINHAS diferente\nSaindo . . " ; exit 1 ; }
NL="1"
while ((NL<=NR01));do
sed -i "${NL}s/$(sed -n "${NL}p" $ARQ01|cut -d"_" -f1)/$(sed -n "${NL}p" $ARQ02)/" "$ARQ01"
let NL++
done


É isso!!!

Execute como:
./NOMEDOSCRIPT

Se a duvida foi SANADA, o problema resolvido . . .
Marque o Tópico como "RESOLVIDO", e a resposta como A MELHOR . . .


att.:
marcelo oliver


3. Re: Looping Simultaneo [RESOLVIDO]

Marcelo Matos
zwe

(usa Ubuntu)

Enviado em 21/10/2016 - 19:28h

Boa Tarde marcelo oliver!

Antes de mais nada, muito obrigado pelo seu interesse em me ajudar.

Corrigi meu problema com o código abaixo:

#!/bin/bash

exec 3< /tmp/xxx.txt

count=0

while read arq <&3; do

epoch=$(echo $arq | awk '{ print $1 }' FS="_")
filenameend=$(echo $arq | awk '{ print $2 }' FS="_" | sed '/^$/d')
date=$(date --date="@$epoch" "+%Y-%m-%d_%H:%M:%S")


mv ${arq} ${date}"-""$count"_${filenameend} && echo ${arq} convertido para ${date}"-""$count"__${filenameend}
count=`expr $count + 1`

done

exec 3<&-


Irei analisar seu código e guarda-lo para possíveis problemas futuros.

Obrigado.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts