【发布时间】:2018-02-28 17:08:32
【问题描述】:
如何在 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
【问题讨论】:
-
这段代码看起来像是一堆语法错误。此外,bash 没有 do-while 循环。
-
把那个东西转储到shellcheck.net 并修复它。
-
您不能在读取文件的同时写入文件,您需要写入一个新文件。然后在循环完成后重命名它。
-
我建议您使用
awk,而不是bash,这样您就不必为ELMS_STORAGE中的每一行阅读CUSTOMER_LIST。将客户列表读入数组,然后在处理elms存储时使用数组。 -
@Barmar,我对在 bash 中正确实现这一点 不可能 提出了非常轻微的问题。当然也可以采用读入数组的方法。