雨过天晴12 2018-11-16 11:29 采纳率: 0%
浏览 710
已采纳

请教一个shell的写法对于列数不固定的文件把每列的值取出来,如然后写入insert SQL

1.想把文件中的每列值取出来,然后作为insert 语句中的值,写成insert SQL。
2.同时文件中的列数是不固定的,可能先需要对列数进行一个判定。_
文件样本:
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
612,2018,10,1,612,44638994,2018-10-22 02:49:28.95
613,2018,10,1, ,FMSCCCM ,2018-10-19 15:06:15.403
615,2018,10,1,615,44638994,2018-10-22 02:49:28.952
616,2018,10,1,616,44638994,2018-10-22 02:49:28.953
618,2018,10,1,618,44638994,2018-10-22 02:49:28.955
619,2018,10,1, ,FMSCCCM ,2018-10-19 15:07:19.518

期望结果是生成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);
目前能写出来把文件每一列值取出,作为insert语句中的值
如:
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

但是由于文件中的**列数不固定**,脚本目前是写死了7列,不知道列数不一样的话,如何先对列进行一个判定,然后再根据实际列数进行取值!
求指教!

  • 写回答

3条回答 默认 最新

  • 雨过天晴12 2019-01-02 11:33
    关注

    while read line
    do
    echo $line | sed "s/^/insert into ${SCHEMA_NM.TABLE_NM} values (\'/g; s/$/\');/g; s/,/\',\'/g"

    done < ${SCHEMA_NM.TABLE_NM}.csv

    我用这个办法解决了insert 语句问题

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同
  • ¥50 如何openEuler 22.03上安装配置drbd
  • ¥20 ING91680C BLE5.3 芯片怎么实现串口收发数据
  • ¥15 无线连接树莓派,无法执行update,如何解决?(相关搜索:软件下载)
  • ¥15 Windows11, backspace, enter, space键失灵
  • ¥15 cfx离心泵非稳态计算