Lê um arquivo usando o shell script e faz 2 novos arquivos baseados no Nome do item

0

Eu tenho abaixo o arquivo comigo: -

====== 20160606:034441 ====== Mango(Test)
TestName     MangoT
Row  0
Season N
Name Safeda
Location    Delhi

====== 20160606:034441 ====== Mango(Result)
TestName     MangoR
Result  0
No_of_Mango 13
Quantity    2
Quantity    3
Quantity    6
Quantity    0
Quantity    1
Quantity    9
Quantity    54
Quantity    2
Quantity    4
Quantity    6
Quantity    76
Quantity    0
Quantity    99
Price   50
Price   70
Price   40
Price   30
Price   40
Price   30
Price   20
Price   60
Price   70
Price   80
Price   90
Price   30
Price   30


====== 20160606:034441 ====== Mango(Test)
TestName     MangoT
Row  0
Season N
Name Alphonso
Location    Mumbai


====== 20160606:034441 ====== Mango(Result)
TestName     MangoR
Result  0
No_of_Mango 13
Quantity    5
Quantity    3
Quantity    1
Quantity    0
Quantity    7
Quantity    8
Quantity    70
Quantity    3
Quantity    23
Quantity    43
Quantity    734
Quantity    2
Quantity    929
Price   50
Price   70
Price   40
Price   30
Price   40
Price   30
Price   20
Price   60
Price   70
Price   80
Price   90
Price   30
Price   30

Agora eu preciso de dois arquivos de entrada do arquivo acima com base no nome de manga como: - Nome de arquivo: - safeda.txt

TestName     MangoR
Result  0
No_of_Mango 13
Quantity    2
Quantity    3
Quantity    6
Quantity    0
Quantity    1
Quantity    9
Quantity    54
Quantity    2
Quantity    4
Quantity    6
Quantity    76
Quantity    0
Quantity    99
Price   50
Price   70
Price   40
Price   30
Price   40
Price   30
Price   20
Price   60
Price   70
Price   80
Price   90
Price   30
Price   30

2º nome do arquivo: - Alphonso.txt

TestName     MangoR
Result  0
No_of_Mango 13
Quantity    5
Quantity    3
Quantity    1
Quantity    0
Quantity    7
Quantity    8
Quantity    70
Quantity    3
Quantity    23
Quantity    43
Quantity    734
Quantity    2
Quantity    929
Price   50
Price   70
Price   40
Price   30
Price   40
Price   30
Price   20
Price   60
Price   70
Price   80
Price   90
Price   30
Price   30

Eu preciso criar esses dois arquivos usando o script de shell.

    
por Chandan Ray 20.06.2016 / 14:36

2 respostas

1
#!/bin/bash

filename=""
do_write=0

while read line
do
  case $line in
    ==*Result*) do_write=1
                ;;
      ==*Test*) do_write=0
                filename=""
                ;;
         Name*) [[ $do_write == 0 ]] && filename=${line#Name }.txt
                ;;
            "") # Skip blank lines
                ;;
             *) [[ $do_write == 1 ]] && echo "$line" >> $filename
  esac
done

Com seu arquivo de entrada:

$ head -10 input
====== 20160606:034441 ====== Mango(Test)
TestName     MangoT
Row  0
Season N
Name Safeda
Location    Delhi

====== 20160606:034441 ====== Mango(Result)
TestName     MangoR
Result  0

Recebemos os resultados:

$ ./parse < input

$ ls
Alphonso.txt  input  parse   Safeda.txt

$ head Alphonso.txt
TestName     MangoR
Result  0
No_of_Mango 13
Quantity    5
Quantity    3
Quantity    1
Quantity    0
Quantity    7
Quantity    8
Quantity    70    

$ head Safeda.txt
TestName     MangoR
Result  0
No_of_Mango 13
Quantity    2
Quantity    3
Quantity    6
Quantity    0
Quantity    1
Quantity    9
Quantity    54
    
por 20.06.2016 / 15:32
1

Aqui está uma maneira:

$ awk '(/=====/){a=0}
       (/\(Result\)\s*$/){a=1; next} 
       ($1=="Name"){n=$2}
       (a==1){print >> n".txt"}' file 

Explicação

  • (/=====/){a=0} : se a linha atual corresponder a ====== , defina a a 0 .
  • (/\(Result\)\s*$/){a=1; next}: if the current line ends with (Resultados) followed by 0 or more whitespace, set a to 1 'e pule para a próxima linha.
  • ($1=="Name"){n=$2} : se o primeiro campo for Name , defina a variável n para o valor do segundo campo.
  • (a==1){print >> n".txt" : se a for 1 , imprima esta linha em um arquivo chamado n (o Nome) com a extensão .txt .
por 20.06.2016 / 15:31

Tags