Ich habe derzeit Tausende von .jdx-Dateien und es ist mir gelungen, einen Weg zu finden, um die Zeilen, die ich brauche, aus den Dateien in einer neuen Datei wiederzugeben. Was ich nicht tun kann, ist, die zusätzlichen Daten zu erhalten, die ich wiedergeben muss.
Die Batch-Datei, die ich bisher entwickelt habe, ist diese.
#!/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
Nun, für mein Leben kann ich nicht scheinen, dass dies funktioniert. Bevor ich noch grauer werde, gibt es irgendeinen gütigen Menschen, der mir vielleicht helfen kann?
Vielen Dank
`echo \ r` tut nicht das, was Sie denken. Überprüfen Sie Ihren Code mit [ShellCheck - Shell-Skriptanalyse-Tool] (https://www.shellcheck.net/).
DavidPostill vor 6 Jahren
0
Okay, danke für den Link. Ich habe das \ r entfernt und das Skript wird ausgeführt, scheint aber keine der Daten aus der .jdx zu ziehen.
user3179273 vor 6 Jahren
0
Eigentlich .. SEIN ARBEITEN :) - Danke für den Hinweis auf diesen Checker !! Tolle..
user3179273 vor 6 Jahren
0
2 Antworten auf die Frage
0
DavidPostill
Nun, für mein Leben kann ich nicht scheinen, dass dies funktioniert.
$ 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. $
Hmm, warte. Ich bin so weit gekommen, aber jetzt ist die zweite Reihe --- ich kann nicht zur Arbeit kommen.
user3179273 vor 6 Jahren
0
@ user3179273 Sie geben in Ihrem Bash-Skript nur einmal "---" aus.
DavidPostill vor 6 Jahren
0
Ja, ich musste das Skript bearbeiten, da es nicht lief. Lass mich sehen, ob ich noch ein bisschen weiter kommen kann ..
user3179273 vor 6 Jahren
0
@ user3179273 Bitte hören Sie auf, meine Antwort zu bearbeiten. Wenn Sie neuen Code haben, bearbeiten Sie ** Ihre Frage **
DavidPostill vor 6 Jahren
0
0
user3179273
Okay. Endlich haben wir es sortiert ..
Entschuldigung, dass Sie nicht wissen, wie Sie diesen Ort nutzen sollen ..
#!/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