Mostrando postagens com marcador Unix. Mostrar todas as postagens
Mostrando postagens com marcador Unix. Mostrar todas as postagens

quarta-feira, 26 de setembro de 2012

Ordenar a saída do comando ls a partir de um substring do nome dos arquivos listados

Recentemente, me deparei com uma situação inusitada e precisei fazer um shell script para resolver.

Um fornecedor envia uns arquivos para serem processados em ordem de criação, mas não adianta ordenar por data/hora de criação porque é comum criar arquivos retroativos, ou seja, tem que ordenar pelo nome (que contém data e hora no formato DDMMYY).
Por causa do formato de data usado na formação do nome do arquivo, a ordem de processamento por nome também pode falhar.

Formato do nome do arquivo:  arq_DDMMYYHHMISS

O script (abaixo), pega a saída do comando "ls", trata parte do nome dos arquivos e ordena por essa parte (no caso, inverte o formato da data contido no nome de cada arquivo).

No final, retorna a lista com o nome completo do arquivo conforme nova ordenação.

Script
_______________________________________________________________
#!/bin/ksh
ls -l >/dev/null 2>/dev/null
if [ $? = 0 ]
then
   directory=/home0/users/josbar
   if [ -e $directory/temp.txt ]
   then
     rm $directory/temp.txt
   fi

   for FILE_RCV in $directory/arqpro*
   do
      if [ -s $FILE_RCV ]
      then
        file_name=`basename $FILE_RCV`
        seg=$(echo $file_name | cut -c18-19)
        min=$(echo $file_name | cut -c16-17)
        hor=$(echo $file_name | cut -c14-15)
        day=$(echo $file_name | cut -c8-9)
        month=$(echo $file_name | cut -c10-11)
        year=$(echo $file_name |cut -c12-13)
        order_by=$year$month$day$hor$min$seg
        echo $order_by - $FILE_RCV >> $directory/temp.txt
      fi
   done
   cat $directory/temp.txt | sort -n | cut -c16-55
fi
_____________________________________________________________

sábado, 28 de agosto de 2010

Shell Script para ler lista e buscar dependências em arquivos

Recentemente precisei fazer uma análise de dependências entre programas escritos em Pro*C e rotinas armazenadas em banco de dados.

Para realizar essa tarefa, gerei um arquivo com a lista de rotinas armazenadas no banco de dados (funções, procedures e packages), chamada "listaProc.txt" e um shell script que executa um loop nessa lista.
Nesse loop, para cada rotina listada, o script executa uma busca por ela nos arquivos da pasta atual e, gera o resultado da busca em um arquivo de resultados (arquivo "resultado.txt"), relacionando o nome da rotina com os arquivos onde ela é invocada.

A busca é realizada utilizando o comando grep -i.

Abaixo segue o código do Shell Script:
#!/bin/bash
for i in $(cat /home0/users/josbar/listaProc.txt)
do
grep -i "$i" *.pc >> resultado.txt
done
Depois de executado o script, basta carregar o arquivo "resultado.txt" em uma planilha como se fosse um arquivo "csv", delimitado pelo caracter ":" e fazer a análise.

No meu caso, o script foi útil para fazer a análise de dependência em programas Pro*C, mas pode ser utilizado para outros tipos de arquivos.

Referências: