【问题标题】:Edit line by line via a do while [duplicate]通过do while [重复]逐行编辑
【发布时间】: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 中正确实现这一点 不可能 提出了非常轻微的问题。当然也可以采用读入数组的方法。

标签: bash do-while


【解决方案1】:

试试paste,这可能是你想要的

$ paste f1.csv f2.csv 
monkey  brown
dog green
tiger   yellow

【讨论】:

    猜你喜欢
    • 2015-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-19
    • 2010-11-07
    • 2013-10-30
    • 2014-11-30
    相关资源
    最近更新 更多