从文件读入变量 - Bash Script take2

时间:2014-05-01 17:14:34

标签: mysql linux bash shell awk

这是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。*

2 个答案:

答案 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
  1. 设置OFSORS
  2. 如果我们没有第二个字段,请在第一个字段中添加*
  3. 添加*作为最终字段。
  4. 打印线。
  5. awk -f script.awk inputfile运行,其中上述脚本位于script.awk(或其他)文件中。