这是从文件读入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。*
使用这个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
OFS
和ORS
。 *
。 *
作为最后一个字段。 以awk -f script.awk inputfile
运行,其中上述脚本位于script.awk
(或其他)文件中。