Hello
My enslish id bad. Excuse-me.
I'll try to explain. If you have questions, ask me.
This script is adapted from
-------------------------
Linux: Localizar e excluir linhas repetidas em um arquivo texto [Shell Script]
Code ( my code adapted )
See below how to use.
-----------------------------------
Code:
#!/bin/bash
# limpa_duplicados - Copyright (C) 2009 Gabriel Fernandes <[email protected]>
if [ ! -f "$1" ] ; then
echo ""
echo "limpa_duplicados - Copyright (C) 2009 Gabriel Fernandes"
echo ""
echo "Use: $0 /caminho/do/arquivo caracteres inicio"
echo ""
echo "Parametros:"
echo "/caminho/do/arquivo = Caminho completo do arquivo;"
echo "caracteres = Quantidade de caracteres que compoem a chave da linha (opcional, padrao=450);"
echo "inicio = Posicao inicial da chave, comecando em 0 - ZERO (opcional, padrao=0);"
echo ""
echo "Exemplo: $0 arquivo.txt 450 0"
echo ""
echo "Precisa de ajuda? Fale comigo!"
echo "[email protected]"
echo ""
exit 1
fi
# Recebe caminho completo do arquivo para processar
ARQUIVO=$1
ARQUIVO_SAIDA="$ARQUIVO-SAIDA"
ARQUIVO_SAIDA2="$ARQUIVO-SAIDA2"
ARQUIVO_DUPLICADOS="$ARQUIVO-DUPLICADOS"
# Recebe parametros da chave
CARACTERES=$2
INICIO=$3
# apaga arquivo antigos ja processados
rm -rf "$ARQUIVO-SAIDA" "$ARQUIVO-DUPLICADOS"
# faz backup do arquivo original
cp "$ARQUIVO" "$ARQUIVO-ORIGINAL"
# Conta quantidade linha para processar
NUM_LINHAS=$(cat $ARQUIVO | wc -l)
let NUM_LINHAS++
# Inicia contadores
CONT_LINHAS_DUPLICADAS="0"
CONT_LINHAS_SAIDA="0"
CONT_LINHAS_PROCESSADAS="1"
while read LINHA ; do
# Carrega os primeiros X caracteres da linha, aqui neste ponto voce pode arrumar a precisao do teste
# aumentando ou diminuindo a quantidade de caracteres a ser testado na linha, o padrão quando omisso eh 450
if [ ! -f "$2" ] || [ ! -f "$3" ]; then
LINHA_ATUAL=${LINHA:0:450}
else
LINHA_ATUAL=${LINHA:$INICIO:$CARACTERES}
fi
# Verifica quantas vezes esta linha foi encontrada no arquivo
QTDE_LINHAS_LOCALIZADAS_ORIGINAL=$(grep "$LINHA_ATUAL" $ARQUIVO | wc -l)
echo "$QTDE_LINHAS_LOCALIZADAS_ORIGINAL" "$LINHA" >> $ARQUIVO_SAIDA2
if [ "$QTDE_LINHAS_LOCALIZADAS_ORIGINAL" == "1" ]; then
let CONT_LINHAS_SAIDA++
echo "$QTDE_LINHAS_LOCALIZADAS_ORIGINAL" "$LINHA" >> $ARQUIVO_SAIDA
else
# Verifica se a linha repetida ja esta no arquivo novo
QTDE_LINHAS_LOCALIZADAS_NOVO=$(grep "$LINHA_ATUAL" $ARQUIVO_SAIDA | wc -l)
if [ "$QTDE_LINHAS_LOCALIZADAS_NOVO" == "0" ]; then
let CONT_LINHAS_DUPLICADAS++
let CONT_LINHAS_SAIDA++
echo "$LINHA" >> $ARQUIVO_SAIDA
echo "$LINHA" >> $ARQUIVO_DUPLICADOS
fi
fi
let CONT_LINHAS_PROCESSADAS++
clear
echo "Processando arquivo: $ARQUIVO"
echo "Registro:$CONT_LINHAS_PROCESSADAS de $NUM_LINHAS"
echo "Normal:$CONT_LINHAS_SAIDA Duplo:$CONT_LINHAS_DUPLICADAS"
done < $ARQUIVO
echo "Processado arquivo: $ARQUIVO" > $ARQUIVO-LOG
echo "Registro:$CONT_LINHAS_PROCESSADAS de $NUM_LINHAS" >> $ARQUIVO-LOG
echo "Normal:$CONT_LINHAS_SAIDA Duplo:$CONT_LINHAS_DUPLICADAS" >> $ARQUIVO-LOG
-----------------------------------
1) Create file limpa_duplicados.sh and put this code and save in root
2) Change permission to 755
3) Make download of cron file to your computer ( /var/log/cron )
4) Open in MS EXCEL and use : to separate in cells
5) Copy collun of real cron to notepad and save as cron.txt
Final result: I.E. of file cron.txt
(root) CMD (/usr/local/cpanel/scripts/monitornginxvhost > /dev/null 2>&1 )
(root) CMD (perl /usr/local/stop/stop >/dev/null 2>&1)
(new) CMD (php /home/new/.rvsitebuilder/rvscronjobctrl.php)
(root) CMD (/usr/local/cpanel/scripts/monitornginxvhost > /dev/null 2>&1 )
(root) CMD (perl /usr/local/stop/stop >/dev/null 2>&1)
(megaclic) CMD (php -f /home/megaclic/public_html/cron/cron.php )
(sucessbr) CMD (wget -q -O /dev/null http
(junior) CMD (php -f /home/junior/public_html/marketing/admin/cron/cron.php)
(square) CMD (/usr/bin/php -f /home/square/public_html/emarket/admin/cron/cron.php)
(aragov) CMD (wget -q -O /dev/null http
6) Upload the file to your server and move to root
7) Run ./limpa_duplicados.sh cron.txt 450 0
wait to finsh
8) After finish, view the files generated
In particular file
cron.txt-SAIDA2
Rename this file to cron2.txt ( mv cron.txt-SAIDA2 to cron2.txt )
9) Run again the script but now to cron2.txt
Run ./limpa_duplicados.sh cron2.txt 450 0
10) View all abusers in
cron2.txt-DUPLICADOS
Thank you
Konrath