这是Read from file into variable - Bash Script
的第二部分我有一个bash脚本,它读取文件中的字符串并将其分配给变量。该文件看起来像这样(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
但是我需要在每个子字符串的末尾添加一些通配符。我需要这个结果:
database1.table1.*|database1.table4.*|database2*.*|database3.table2.*
条件是:如果我们读取database2,则输出应该是database2 *。*并且如果我们读取数据库和表,则输出应该是database1.table1。*
答案 0 :(得分:0)
将此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.*
答案 1 :(得分:0)
假设(略微奇怪的)正则表达式是正确的,以下awk脚本对我的示例输入起作用。
BEGIN {OFS="."; ORS="|"}
!$2 {$1=$1"*"}
{$(NF+1)="*"}
1
OFS
和ORS
。*
。*
作为最终字段。以awk -f script.awk inputfile
运行,其中上述脚本位于script.awk
(或其他)文件中。