1

file.csv から file.sql ファイルを生成する必要があるため、次のコマンドを使用します。

cat file.csv |sed "s/\(.*\),\(.*\)/insert into table(value1, value2)
values\('\1','\2'\);/g" > file.sql

完全に機能しますが、値が 9 を超える場合 (たとえば、\10、\11 など)、最初の数値 (この場合は \1) のみが考慮され、残りは無視されます。

何かを見逃していないか、それを行う別の方法があるかどうかを知りたいです。

ありがとうございました !

EDIT:
動作しない例:

私のfile.csvは次のようになります

2013-04-01 04:00:52,2,37,74,40233964,3860,0,0,4878,174,3,0,0,3598,27.00,27

私が得るもの

テーブル
val1、val2、val3、val4、val5、val6、val7、val8、val9、val10、val11、val12、val13、val14、val15、val16 に挿入します。

値 ('2013-04-01 07:39:43',
2,37,74,36526530,3877,0,0,6080,
2013-04-01 07:39:430,2013-04-01 07:39 :431,
2013-04-01 07:39:432,2013-04-01 07:39:433,
2013-04-01 07:39:434,2013-04-01 07:39:435,
2013-04 -01 07:39:436);

9番目の要素の後、10番目、11番目などの代わりに最初の要素を取得します...

4

2 に答える 2

1

スクリプトを試してくださいawk(@JS웃 ソリューションに基づく):

script.awk

#!/usr/bin/env awk
# before looping the file
BEGIN{
  FS="," # input separator
  OFS=FS # output separator
  q="\047" # single quote as a variable
}

# on each line (no pattern)
{
  printf "insert into table values ("
    print q $1 q ", "
    print $2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16
  print ");"
}

で実行

awk -f script.awk file.csv

一発ギャグ

awk 'BEGIN{OFS=FS=","; q="\047" } { printf "insert into table values (" q $1 q ", " $2","$3","$4","$5","$6","$7","$8","$9","$10","$11","$12","$13","$14","$15","$16 ");" }' file.csv
于 2013-06-26T13:53:00.040 に答える
1

私が知る限りsed、9 つの後方参照をサポートするという制限があります。新しいバージョンでは削除されている可能性があります (確かではありませんが)。perlこれにはorを使用する方がよいでしょうawk

で行う方法は次のawkとおりです。

$ cat csv
2013-04-01 04:00:52,2,37,74,40233964,3860,0,0,4878,174,3,0,0,3598,27.00,27

$ awk 'BEGIN{FS=OFS=","}{print "insert into table values (\x27"$1"\x27",$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16 ");"}' csv
insert into table values ('2013-04-01 04:00:52',2,37,74,40233964,3860,0,0,4878,174,3,0,0,3598,27.00,27);

でできることは次のperlとおりです。

$ perl -ple 's/([^,]+),([^,]+),([^,]+),([^,]+),([^,]+),([^,]+),([^,]+),([^,]+),([^,]+),([^,]+),([^,]+),([^,]+),([^,]+),([^,]+),([^,]+),([^,]+)/insert into table values (\x27$1\x27,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16);/' csv
insert into table values ('2013-04-01 04:00:52',2,37,74,40233964,3860,0,0,4878,174,3,0,0,3598,27.00,27);
于 2013-06-26T13:22:40.380 に答える