Bash echo do arquivo de entrada com dados adicionais

1

Atualmente, tenho milhares de arquivos .jdx e consegui encontrar uma maneira de obter as linhas que preciso dos arquivos ecoadas em um novo arquivo. O que eu não consigo fazer é obter os dados adicionais que precisam ser ecoados.

Isto é o que eu espero que o resultado final pareça ..

---
title: '1,2-Pentadiene'
visible: true
---

* DATA TYPE=MASS SPECTRUM
* CAS REGISTRY NO=591-95-7
* MOLFORM=C5H8
* MW=137.3

Download JDX: [10574-36-4-Mass16b9.jdx](10574-36-4-Mass16b9.jdx)

e este é o arquivo que está sendo lido ..

##TITLE=1,2-Pentadiene
##JCAMP-DX=4.24
##DATA TYPE=UV/VIS SPECTRUM
##ORIGIN=INSTITUTE OF ENERGY PROBLEMS OF CHEMICAL PHYSICS, RAS
##CAS REGISTRY NO=591-95-7
##MOLFORM=C5H8
##MP=-137.3
##BP=44.9
##SOURCE REFERENCE=RAS UV No. 816
##$NIST SQUIB=1955JON/TAY228-237
##$NIST SOURCE=TSGMTE
##SPECTROMETER/DATA SYSTEM=Beckman DU
##XUNITS=Wavelength (nm)
##YUNITS=Logarithm epsilon
##XFACTOR=1.000000
##YFACTOR=1.000000
##FIRSTX=170.0000
##LASTX=199.0000
##FIRSTY=3.2
##MAXX=199
##MINX=170
##MAXY=3.38
##MINY=2.02
##NPOINTS=30
##$REF AUTHOR=Jones, L.C., Jr.; Taylor, L.W.
##$REF TITLE=Far ultraviolet absorption spectra of unsaturated and aromatic hydrocarbons
##$REF JOURNAL=Anal. Chem.
##$REF VOLUME=27
##$REF NUMBER=2
##$REF PAGE=228-237
##$REF DATE=1955
##XYPOINTS=(XY..XY)
170.0000,3.200002
171.0000,3.190000
172.0000,3.190000
173.0000,3.200000
174.0000,3.240000
175.0000,3.290000
176.0000,3.340000
177.0000,3.380000
178.0000,3.370000
179.0000,3.320000
180.0000,3.320001
181.0000,3.340000
182.0000,3.130000
183.0000,2.940000
184.0000,2.840000
185.0000,2.760000
186.0000,2.700000
187.0000,2.660000
188.0000,2.620000
189.0000,2.570000
190.0000,2.500003
191.0000,2.440000
192.0000,2.370000
193.0000,2.310000
194.0000,2.250000
195.0000,2.220000
196.0000,2.190000
197.0000,2.150000
198.0000,2.080000
199.0000,2.020000
##END=

O arquivo em lote que eu criei até agora é isso.

#!/bin/bash
while read -r line; do
echo \r --- > new.txt;
 echo \r visible: true >> new.txt;
        if [[ $line =~ TITLE ]] ; then echo \ title: $$line > new.txt; fi
        if [[ $line =~ DATA ]] ; then echo \ $$line >> new.txt; fi
        if [[ $line =~ CAS ]] ; then echo \ $$line >> new.txt; fi
        if [[ $line =~ MOLFORM ]] ; then echo \ $$line >> new.txt; fi
        if [[ $line =~ MW ]] ; then echo \ $$line >> new.txt; fi
 done<*.jdx
yourfilenames='ls *.jdx'
for eachfile in $yourfilenames
do
   echo \ \($eachfile\)\[$eachfile\] >> new.txt; done

Agora, para a vida de mim, eu não consigo fazer isso funcionar. Antes de eu ficar ainda mais grisalho, existe algum tipo de alma que possa me ajudar?

Obrigado

    
por user3179273 21.03.2018 / 17:45

2 respostas

0

Agora, para a vida de mim, eu não consigo fazer isso funcionar.

echo \r não faz o que você acha que faz.

Verifique seu código com ShellCheck - ferramenta de análise de script de shell e corrija os erros / avisos:

$ shellcheck myscript

Line 3:
echo \r --- > new.txt;
     ^-- SC1012: \r is just literal 'r' here. For carriage return, use "$(printf "\r")" instead.

Line 4:
 echo \r visible: true >> new.txt;
      ^-- SC1012: \r is just literal 'r' here. For carriage return, use "$(printf "\r")" instead.

Line 11:
yourfilenames='ls *.jdx'
              ^-- SC2006: Use $(..) instead of legacy '..'.
                  ^-- SC2035: Use ./*glob* or -- *glob* so names with dashes won't become options.

Line 14:
   echo \ \($eachfile\)\[$eachfile\] >> new.txt; done
            ^-- SC2086: Double quote to prevent globbing and word splitting.
                         ^-- SC2086: Double quote to prevent globbing and word splitting.

$ 
    
por 21.03.2018 / 18:27
0

Ok. Finalmente conseguiu classificá-lo ..

Desculpas por não saber como usar este lugar ..

#!/bin/bash
echo --- > new.txt;
 echo visible: true >> new.txt &&
while read -r line; do
        if [[ $line =~ TITLE ]] ; then echo \ title: \'$line\' >> new.txt; fi
        if [[ $line =~ DATA ]] ; then echo \ --- >> new.txt; fi
        if [[ $line =~ DATA ]] ; then echo \ $line >> new.txt; fi
        if [[ $line =~ CAS ]] ; then echo \ $line >> new.txt; fi
        if [[ $line =~ MOLFORM ]] ; then echo \ $line >> new.txt; fi
        if [[ $line =~ MW ]] ; then echo \ $line >> new.txt; fi
 done<*.jdx
echo -en '\n' >> new.txt
echo -en '\n' >> new.txt

yourfilenames='ls *.jdx'
for eachfile in $yourfilenames
do
   echo Download JDX \ \($eachfile\)\[$eachfile\] >> new.txt; done
        sed -i 's/##DATA TYPE/ * DATA TYPE/g' *.txt
        sed -i 's/ title: ##TITLE=/ title: /g' *.txt
        sed -i 's/##CAS/ * CAS/g' *.txt
        sed -i 's/##MOLFORM/ * MOLFORM/g' *.txt
        sed -i 's/##MW/ * MW/g' *.txt
    
por 21.03.2018 / 18:56

Tags