【发布时间】:2020-02-12 16:14:49
【问题描述】:
我正在 AIX 中编写一个 shell 脚本,它有一些代码来更新文本文件中的某些值。 文件格式如下图:
# cat $FILE
instance1 13 16
instance2 14 12
instance4 58 76
instance15 44 91
instance102 31 10
instance112 12 38
我正在尝试按实例名称搜索并将第 2 列和第 3 列中的值替换为新值 我可以使用 perl 做到这一点,如下所示:
# for i in `cat $FILE|awk '{print $1}'`;do
# perl -pi -e "s/`grep -i $i $FILE|awk '{print $2}'`/$NEW_VAL_2/ if /$i/" $FILE
# perl -pi -e "s/`grep -i $i $FILE|awk '{print $3}'`/$NEW_VAL_3/ if /$i/" $FILE
# done
这行得通,但后来我意识到它正在替换每次出现的值。例如,在最后一行中,它替换了第 2 列中的值以及实例名称的最后两个字符。
Example:
# i = instance112
# NEW_VAL_2 = 99
# perl -pi -e "s/`grep -i $i $FILE|awk '{print $2}'`/$NEW_VAL_2/ if /$i/" $FILE
Output:
instance199 99 38
如何按实例名称搜索行并仅替换特定列中的值?
【问题讨论】: