Process Files para criar um novo arquivo

1

Eu tenho um arquivo1 que contém valores separados por vírgula (timein / timeout no formato de hora militar, por exemplo, 0800, 0900, 1300). Para cada linha do arquivo 1 contém timein / timeout para cada dia.

Exemplo de arquivo 1:

Name, Position Level 3
0800, 1800
0900, 1200, 1230, 2000
0901, 2100

O arquivo 2 contém (taxa por hora):

Position Level 1, 100
Position Level 2, 200
Position Level 3, 300
Position Level 4, 400
Position Level 5, 500

Eu preciso criar um arquivo 3 com linhas com a primeira vez e o último tempo limite e o número de horas processadas para cada dia exibido em cada linha do arquivo3. E a última linha exibirá o salário mensal que calculará o número de horas processadas para o mês (soma de horas de cada dia) * a taxa horária.

Arquivo 3:

Name, Position Level 3
0800, 1800, 10
0900, 2000, 10.5
0901, 2100, 10.983
9444.9
    
por user89332 27.10.2014 / 15:31

1 resposta

0

Por favor, note que os arquivos que você forneceu não são separados por vírgula; eles são separados por vírgula. Você precisará remover esses espaços após as vírgulas, caso contrário, o método pode não funcionar corretamente.

O seguinte é um pseudocódigo que deve ajudá-lo a começar.

Cuide de usar os caracteres certos.

Minha abordagem seria:

  • leia e armazene a primeira linha do arquivo1
FIRSTLINE="'head -n 1 file1'"
  • escreva isso para file3
echo "$FIRSTLINE" >> file3
  • leia a primeira linha do arquivo1 e obtenha o segundo argumento com uma vírgula como separador
POSLVL="'head -n 1 file1 | awk -F , '{print $2}''"

Agora você tem o nível de posição em uma variável, isso permite que você calcule a taxa por hora para esse código pesquisando no arquivo2:

RATE='grep "$POSLVL" file2 | awk -F , '{print $2}''

Podemos continuar lendo sempre a linha de arquivo1 usando algo assim:

MAXLINES='wc -l file1 | awk '{print $1}''
LINE=2

while test $LINE -le $MAXLINES
do
  READLINE="'head -n $LINE | tail -n 1'"

  LINE_HOURS=0  
  TOTAL_COST=0

  # count nr of commas to determine the number of in/out pairs
  COMMAS='echo $READLINE | grep -o , | wc -l | awk '{print $1}''

  # if comma-count = 1 (1 in/out pair)
  # extract first and second numbers
  # write these numbers to file3 without a newline (echo -n "$NR1,$NR2")
  # work out difference in hours
  # add to LINE_HOURS

  # if comma-count > 2 (2 in/out pairs)
  # extract third and fourth numbers
  # write these numbers to file3 without a newline 
  # work out difference in hours
  # add to LINE_HOURS

  # maybe add more if's for up to 3, 4 or 5 pairs..

  # -- reached end of the line -- 

  # write LINE_HOURS to file3

  # calculate total cost by multiplying LINE_HOURS * RATE and store in TOTAL_COST 

  LINE=$((LINE + 1))  

done

# -- reached end of the file --

# write TOTAL_COST to file3

Veja como você vai.

    
por 29.10.2014 / 02:07