Bash эхо из входного файла с дополнительными данными
300
user3179273
В настоящее время у меня есть тысячи файлов .jdx, и мне удалось найти способ получить нужные мне строки из файлов, отраженных в новом файле. Похоже, я не могу получить дополнительные данные, которые мне нужны.
Это то, что я надеюсь, что конечный результат будет выглядеть ..
#!/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
Теперь я, кажется, не могу заставить это работать. Прежде чем я стану еще более серым, есть ли какая-нибудь добрая душа, которая сможет мне помочь?
Спасибо
`echo \ r` не делает то, что вы думаете, делает. Проверьте ваш код с помощью [ShellCheck - инструмент анализа сценариев оболочки] (https://www.shellcheck.net/)
DavidPostill 6 лет назад
0
Хорошо, спасибо за ссылку. Я удалил \ r и скрипт запустился, но, похоже, не извлекал данные из .jdx ..
user3179273 6 лет назад
0
На самом деле .. Это работает :) - Спасибо за совет по этой проверке! Удивительно..
user3179273 6 лет назад
0
2 ответа на вопрос
0
DavidPostill
Теперь я, кажется, не могу заставить это работать.
$ 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. $
Хм, подожди. Я так далеко, но теперь второй ряд --- Я не могу приступить к работе.
user3179273 6 лет назад
0
@ user3179273 Вы только один раз повторяете `---` в своем скрипте bash.
DavidPostill 6 лет назад
0
Да, мне пришлось отредактировать скрипт, так как он не работал. Дайте мне посмотреть, смогу ли я получить немного дальше ..
user3179273 6 лет назад
0
@ user3179273 Пожалуйста, прекратите пытаться редактировать мой ответ. Если у вас есть новый код, то отредактируйте ** свой вопрос **
DavidPostill 6 лет назад
0
0
user3179273
Хорошо. Наконец-то разобрались ..
Извиняюсь за то, что не знал, как использовать это место ..
#!/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