在bash中的for循环中添加后缀

时间:2015-12-02 02:47:41

标签: bash

这是/ tmp / foo文件

cat /tmp/foo ---->   monohajo,wuem,taraziem,mullanke,fernanja

$ for i in $(cat /tmp/foo | awk -F':' '{print $NF}');
do
echo "update PTMM_ARCHIVE.FASTTRACK_USER set user_name = '"$i{xx}"' where user_name = '"$i"' ";
done | tr -d "{}"

update PTMM_ARCHIVE.FASTTRACK_USER set user_name = 'monohajoxx' where user_name = 'monohajo'
update PTMM_ARCHIVE.FASTTRACK_USER set user_name = 'wuemxx' where user_name = 'wuem'
update PTMM_ARCHIVE.FASTTRACK_USER set user_name = 'taraziemxx' where user_name = 'taraziem'
update PTMM_ARCHIVE.FASTTRACK_USER set user_name = 'mullankexx' where user_name = 'mullanke'
update PTMM_ARCHIVE.FASTTRACK_USER set user_name = 'fernanjaxx' where user_name = 'fernanja'

$ i {xx}很麻烦因为我没有删除数据库中的名字,我只是添加一个xx(更改它们) 我便宜地用tr攻击了它,最后我拿走了{}。

有更好的方法吗?

1 个答案:

答案 0 :(得分:2)

如果需要访问紧跟其他字符的字符串中的变量,可以使用花括号将变量名称与其余字符分开:

for i in mono hajo tara;
do
    echo "change $i into ${i}xx"
done

返回:

change mono into monoxx
change hajo into hajoxx
change tara into taraxx

然而,你的脚本的第一部分让我感到困惑。 foo似乎是以逗号分隔的名称列表组成的。 awk -F':' '{print $NF}'将打印出最后一个字段,假设字段是冒号分隔的。

他们不是。所以'last'字段也是第一个(也是唯一的)字段,意味着输出整行(包括逗号)。

但是你显示的输出不一致。它更像是一条线:

update PTMM_ARCHIVE.FASTTRACK_USER set user_name = 'monohajo,wuem,taraziem,mullanke,fernanjaxx' where user_name = 'monohajo,wuem,taraziem,mullanke,fernanja'