雨过天晴12 2018-11-17 12:12 采纳率: 0%
浏览 378

求助一个shell的写法,或者提供思路也可以。

文件中的数据举例:

955,2018,10,1, ,FMSCCCM ,2018-10-19 15:04:55.511
602,2018,10,1,602,44638994,2018-10-22 02:49:28.944
608,2018,10,1,608,44638994,2018-10-22 02:49:28.946
610,2018,10,1,610,44638994,2018-10-22 02:49:28.948
期望结果是生成insert SQL:
insert into tablename values ('955','2018','10','1',' ','FMSCCCM' ,'2018-10-19 15:04:55.511');
insert into tablename values ('602','2018','10','1','602 ','44638994' ,'2018-10-22 02:49:28.944');
insert into tablename values ('608','2018','10','1','608 ','44638994' ,'2018-10-22 02:49:28.946');
insert into tablename values ('610','2018','10','1','610 ','44638994' ,'2018-10-22 02:49:28.948);

希望用shell 写个脚本,数据文件中的列数和行数是不确定的,所以行和列都不能写死。从
文件中读取每行每列的值放入SQL insert 语句中的values中。感谢各位大神提供指导和帮助!
我目前写的shell的把列写死了,但是实际情况中列数每次都不一样,可能7列,也可能十几列的,所以这里就不会写了!awk -F ","'{print $1}' 中$后面的数字可以是变量吗?
while read line
do
echo $line > tmp
col1=awk -F "," '{print $1}' tmp
col2=awk -F "," '{print $2}' tmp
col3=awk -F "," '{print $3}' tmp
col4=awk -F "," '{print $4}' tmp
col5=awk -F "," '{print $5}' tmp
col6=awk -F "," '{print $6}' tmp
col7=awk -F "," '{print $7}' tmp

echo "insert into tablename values ('$col1','$col2','$col3','$col4','$col5','$col6','$col7');"

done < test4.log

  • 写回答

1条回答 默认 最新

  • lshen01 2023-03-15 18:52
    关注

    参考GPT和自己的思路:

    你可以使用 awk 命令来处理这个问题,而不需要将每个字段预定义为变量。具体的代码如下:

    awk -F "," '{printf "insert into tablename values (\x27%s\x27,\x27%s\x27,\x27%s\x27,\x27%s\x27,\x27%s\x27,\x27%s\x27,\x27%s\x27);\n",$1,$2,$3,$4,$5,$6,$7}' test4.log

    这个命令会读取 test4.log 文件中的每行内容,使用逗号作为分隔符,并根据每列的内容生成一个对应的 insert 语句。此处使用 printf 命令来输出 insert 语句,并使用 \x27 的方式生成单引号。

    如果文件中的列数不确定,也可以考虑使用 awk 的 $NF 变量来获取每行的最后一个字段,从而避免预定义所有的变量。具体的命令如下:

    awk -F "," '{sql="insert into tablename values (\x27"$1"\x27";";for(i=2;i<=NF;i++){sql=sql"\x27,\x27"$i"\x27";}sql=sql");\n";print sql}' test4.log

    这个命令中使用一个 for 循环来遍历每行的所有字段,并使用字符串拼接的方式生成 insert 语句。此处使用 print 命令输出 insert 语句,而不是 printf 命令。

    评论

报告相同问题?

悬赏问题

  • ¥15 Oracle触发器记录修改前后的字段值
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图
  • ¥15 stm32开发clion时遇到的编译问题
  • ¥15 lna设计 源简并电感型共源放大器