从文件读入variables – Bash脚本take2

这是从文件读入variables – Bash脚本的第二部分

我有一个bash脚本读取文件中的stringparsing并分配给一个variables。 该文件看起来像这样(file.txt):

database1 table1 database1 table4 database2 database3 table2 

在脚本中使用awk

 s=$(awk '{$1=$1}1' OFS='.' ORS='|' file.txt) LIST="${s%|}" echo "$LIST" database1.table1|database1.table4|database2|database3.table2 

但是我需要在每个子string的末尾添加一些通配符。 我需要这个结果:

 database1.table1.*|database1.table4.*|database2*.*|database3.table2.* 

条件是:如果我们读取数据库2的输出应该是数据库2 *。*,如果我们读取数据库和表,输出应该是database1.table1。*

Solutions Collecting From Web of "从文件读入variables – Bash脚本take2"

使用这个awk与ORS='.*|'

 s=$(awk '$0=="database2"{$0=$0 "*.*";print;next} {$2=$2 ".*"}1' OFS='.' ORS='|' file.txt) LIST="${s%|}" echo "$LIST" database1.table1.*|database1.table4.*|database2*.*|database3.table2.* 

假设(稍微奇怪的)正则表达式是正确的,下面的awk脚本适用于我的示例输入。

 BEGIN {OFS="."; ORS="|"} !$2 {$1=$1"*"} {$(NF+1)="*"} 1 
  1. 设置OFSORS
  2. 如果我们没有第二个字段,则在第一个字段中添加*
  3. 添加一个*作为最后一个字段。
  4. 打印行。

awk -f script.awk inputfile运行,其中上述脚本位于script.awk (或其他)文件中。