2012-02-28 45 views
1

我是新来的unix脚本,并会感谢某些方向或帮助。我想制作一个脚本,通过包含类似于以下信息的csv文件进行读取。Unix脚本读取CSV文件,然后更改格式

Business Group Used Disk Space (GB) Disk Quota (GB) Grace Period 
EandT-Mech 35403.4     37434.2    none 
Rotatives-AD 6.40E-05      524.288    none 
Nacelles-Mech 0.056832      1677.72    none 

然后我需要在同一脚本一旦”读或读改变成这种格式:

INSERT INTO Storage (b_group, used_space, disk_quota, grace_period) 
VALUES (‘TSandD-Aero’,6.40E-05,734.003, ‘none’); 
INSERT INTO Storage (b_group, used_space, disk_quota, grace_period) 
VALUES (‘EDS-Admin’,192.076,3568.01, ‘none’); 

所以只要改变这些值与4以下信息任何被读取过在csv文件中。

所以总结一下,读取csv文件,放入sql formit并将其提交到我的数据库中,任何帮助或方向,让我去将是appreicated,因为我无法找到任何类似的在线。

+0

这看起来不像csv,它看起来像是制表符分隔的列或恒定的列宽。无论哪种方式,你尝试过'cut'还是'awk'? – cha0site 2012-02-28 11:38:25

+2

Awk?至少Perl。另外你的DBMS可能有一个批量导入工具,可以开箱即用。 – Ben 2012-02-28 11:39:59

+0

@ cha0site [CSV](http://en.wikipedia.org/wiki/Comma-separated_values)名称中包含“逗号”,但通常描述的是“分隔符分隔文件”。事实上,当你选择“[CSV](http://en.wikipedia.org/wiki/Comma-separated_values)”作为目标格式时,excel(例如)使用制表符作为分隔符。 – Kaii 2012-02-28 11:41:12

回答

0

COPY storage from'/h/u544835/dehpc14_Disk_Quota_Report.csv'DELIMITERS','CSV;

1
$ cat input.txt | awk 'NR>1{printf "INSERT INTO Storage(b_group, used_space, disk_quota, grace_period)\nVALUES(\"%s\", %s, %s, \"%s\");\n",$1,$2,$3,$4}' | tr '"' "'" 

INSERT INTO Storage(b_group, used_space, disk_quota, grace_period) 
VALUES('EandT-Mech', 35403.4, 37434.2, 'none'); 
INSERT INTO Storage(b_group, used_space, disk_quota, grace_period) 
VALUES('Rotatives-AD', 6.40E-05, 524.288, 'none'); 
INSERT INTO Storage(b_group, used_space, disk_quota, grace_period) 
VALUES('Nacelles-Mech', 0.056832, 1677.72, 'none'); 
+0

对不起,你可以解释一下这是怎么完成的?我在寻找 http://wiki.postgresql.org/wiki/COPY ,并认为我可以使用/我读取一个脚本文件,该文件复制到表存储中,如果您有任何想法,我将如何使用它? – Zenaphor 2012-02-28 13:39:47

+0

这只是基本的'awk'命令:**'$ 2'是字段#2 **。我不熟悉'postgresql'。对不起,我无法给你任何进一步的建议。 – kev 2012-02-28 13:47:51

+0

因为我是一个新用户,并不能回答我的问题但我会张贴在这里:从内部PostgreSQL的 所有我需要做的仅仅是 \ IH /位置,该脚本我做的一切/ runtestscript 就是说 从存储中删除; '/h/u544835/dehpc14_Disk_Quota_Report.csv'DELIMITERS','CSV; 所以我删除那里的所有文件,然后重新添加文件,因为每6小时我需要更新一次,所以我的数据可以保持新鲜。 – Zenaphor 2012-02-28 14:42:16

相关问题