同时读入几个小文件内容的SHELL

我想实现这样一个功能,由SHELL程序读入3个文本文件中的内容,同时作为我SHELL的变量。例如:
cat file1
1
2
3
cat file2
aaa
bbb
ccc
cat file3
aa
bb
cc
SHELL里写上echo "insert table values('$num','$char','$char2')
最终得到如下文件
insert table values('1','aaa','aa')
insert table values('2','bbb','bb')
insert table values('3','ccc','cc)

---------------------------------------------------------------

下面的shell文本能够帮你完成输出,不过没有按照你给出的格式,那样反倒麻烦了。
count=1
total_line=cat file1 &brvbarwc -l

while
test "${count}" -le "${total_line}"
do
awk "NR==$count {printf "insert table values('%s',", $0 }" file1
awk "NR==$count {printf "'%s',", $0 }" file2
awk "NR==$count {printf "'%s')\n", $0 }" file3
count=expr $count + 1
done &brvbarcat>result.txt

一些说明:
3个file都要在执行文件目录下。
输出在result.txt文件中。
输出的格式很不爽,不过好像没有其他好办法,——我对awk不是很熟练。

---------------------------------------------------------------

太难,建议你放弃用shell的方法,如果用awk,即使实现了,运行效率也非常低。我能想到的就是循环读一行。如果有一万行,那就是一万的三次方,不可能这样运行。

你朋友教的方法比较好,用数据库,建表。非常快!

---------------------------------------------------------------

paste file1 file2 file3 &brvbarawk '{print "insert table values("" $1 "","" $2 "","" $3 "")" }' &brvbarsed 's/"/'/g'>targetfile
---------------------------------------------------------------

不好意思,打个补丁:
把后面改成:
&brvbarsed "s/"/'/g" >targetfile
如果你不想出现变量不够的情况,就在awk后加个条件
NF==3,变成这样:
paste file1 file2 file3 &brvbarawk ' NF == 3 { print "insert table values("" $1 "","" $2 "","" $3 "")" }' &brvbarsed "s/"/'/g" >targetfile
就可以了,
这样可以把下例中的后两行滤掉:
cat file1
1
2
3
4
cat file2
aaa
bbb
ccc
cat file3
aa
bb
cc
dd
ee

cat targetfile
insert table values('1','aaa','aa')
insert table values('2','bbb','bb')
insert table values('3','ccc','cc)

Published At
Categories with 服务器类
Tagged with
comments powered by Disqus