需要使用参数化的通用文件创建多个文件,并需要使用Shell脚本创建带有参数值的输入文件

时间:2018-12-13 12:33:22

标签: shell awk sed

通用文件内容:

SELECT @a,
@b,
from @c;

输入文件内容: 标头-> @ a,@ b,@ c,@ d

colA1,ColB1,Table1,File1
colA2,ColB2,Table2,File2
colA3,ColB3,Table3,File3

最终输出应该是文件名为File1,File2等的文件,并且其数据应如下所示,

FILE1应该具有:

SELECT ColA1,
ColB1,
from Table1;

FILE100:

SELECT ColA100,
ColB100,
from Table100;

2 个答案:

答案 0 :(得分:0)

编辑: :由于OP要求从通用文件中读取字段值,因此以下操作可能会有所帮助。

假设以下是通用文件:

cat generic
SELECT 1,
2,
from 3;

运行以下代码。

awk -v s1=",\n"  '
FNR==NR{
  sub(/,$/,"")
  a[FNR]=$NF
  next
}
{
  close(file)
  print "SELECT " $a[1] s1 $a[2] s1 "from " $a[3]";" > ($NF)
  file=$NF
}'  generic FS=","  Input_file

输出将为File1File2等。



能否请您尝试以下。它将创建名为File1File2等的输出文件。

awk -v s1=",\n"  -F, '{close(file);print "SELECT " $1 s1 $2 s1 "from " $3";" > ($NF);file=$NF}' Input_file

在此处添加非单一衬里形式的解决方案。

awk -v s1=",\n"  -F, '
{
  close(file)
  print "SELECT " $1 s1 $2 s1 "from " $3";" > ($NF)
  file=$NF
}'  Input_file

答案 1 :(得分:0)

$ cat tst.awk
NR==FNR {
    fmt = fmt $0 ORS
    next
}
FNR==1 {
    gsub(/@[[:alpha:]]/,"%s",fmt)
    FS = ","
    $0 = $0
}
{
    printf fmt, $1, $2, $3 > $4
    close($4)
}

$ awk -f tst.awk config file

$ for f in File*; do echo "--------$f"; cat "$f"; done
--------File1
SELECT colA1,
ColB1,
from Table1;
--------File2
SELECT colA2,
ColB2,
from Table2;
--------File3
SELECT colA3,
ColB3,
from Table3;