Отредактируйте построчно с помощью do while

Как мне отредактировать строку файла в цикле while, код работает, за исключением того, что находится внутри оператора «if», кто-нибудь делал это раньше? (второй вопрос сегодня, спасибо)

#!/bin/bash
export ELMS_STORAGE="/loc1/f1.csv" 
export CUSTOMER_LIST="/loc2/f2.csv"
while read -r ELMS_SIZE ELMS_NAME ELMS_ENV do while IFS=, read -r
CUSTOMER_ENV CUSTOMER_URI CUSTOMER_NAME CUSTOMER_SCHEMA_OWNER
CUSTOMER_DB_INSTANCE OTHER do


if [ "${ELMS_NAME}" = "${CUSTOMER_URI}" ]; then
#### add a new item to the f2.csv 
${ELMS_STORAGE}.${ELMS_ENV}="${ELMS_ENV} ${CUSTOMER_URI}"   ### doesn't work 
fi


done < <(tac $CUSTOMER_LIST) done < <(tac $ELMS_STORAGE)

exit

f2.csv перед редактированием

monkey
dog
tiger

f2.csv после редактирования

monkey brown 
bird green 
cat yellow

person aymanzone    schedule 19.09.2017    source источник
comment
Этот код выглядит как куча синтаксических ошибок. Кроме того, в bash нет цикла do-while.   -  person melpomene    schedule 19.09.2017
comment
Поместите это в shellcheck.net и исправьте.   -  person JNevill    schedule 19.09.2017
comment
Вы не можете писать в файл одновременно с его чтением, вам нужно записать в новый файл. Затем переименуйте его, когда цикл будет завершен.   -  person Barmar    schedule 19.09.2017
comment
Я предлагаю вам сделать это с awk, а не с bash, поэтому вам не нужно читать CUSTOMER_LIST для каждой строки в ELMS_STORAGE. Считайте список клиентов в массив, затем используйте массив при обработке хранилища вязов.   -  person Barmar    schedule 19.09.2017
comment
@Barmar, у меня очень небольшая проблема с тем, что это невозможно правильно реализовать в bash. Конечно, здесь можно было бы пойти и по методу чтения в массив.   -  person Charles Duffy    schedule 19.09.2017


Ответы (1)


Попробуйте paste, что, вероятно, именно то, что вам нужно

$ paste f1.csv f2.csv 
monkey  brown
dog green
tiger   yellow
person Diego Torres Milano    schedule 19.09.2017