通用文件内容:
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;
答案 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
输出将为File1
,File2
等。
能否请您尝试以下。它将创建名为File1
,File2
等的输出文件。
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;