- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在尝试编写一个 bash 脚本,该脚本将从 csv 文件中提取数据并将其放入我可以将其放入数据库的格式。 csv 文件大约有 1000 行和 8 列。当我使用命令行时,我可以获得完全按照我想要的格式格式化的数据。我正在使用最新版本的 CentOS 最小安装。
(编辑)csv 文件的示例是:
[root@node72 ~]# cat users72.csv | head
msza907,Matyas Szabo,Men,Fencing,FE,germany
krut825,Kristian Ruth,Men,Sailing,SA,norway
sdon251,Samuil Donkov,Men,Shooting,SH,bulgaria
aroa777,Andres Roa,Men,Football,FB,colombia
我在 CLI 中使用的代码是:
# cat users72.csv | awk -F',' '{ print "INSERT INTO athletes (id, username, gender, sport_abbreviation) VALUES (""\""$1"\""", ""\""$3"\""", ""\""$5"\""");"}'
输出示例如下所示:
INSERT INTO athletes (id, username, gender, sport_abbreviation) VALUES ("gjan887", "Men", "AR");
INSERT INTO athletes (id, username, gender, sport_abbreviation) VALUES ("ifet740", "Women", "VO");
INSERT INTO athletes (id, username, gender, sport_abbreviation) VALUES ("apet755", "Men", "AT");
INSERT INTO athletes (id, username, gender, sport_abbreviation) VALUES ("fnep723", "Men", "SH");
INSERT INTO athletes (id, username, gender, sport_abbreviation) VALUES ("othi288", "Women", "BK");
这个语法对于 mysql 来说并不完全正确,因为我需要一个 ID 号,而这正是我使用脚本的目的。 ID 号必须按奇数递增,因此 1、3、5 等。我的脚本的问题是,当我运行它并将其保存到一个文件中时,我计划使用它来将数据导入数据库,它打印一行带有 id 和用户名,然后下一行包含我不需要的其他数据,我能弄明白。
下面是我的脚本:
#!/bin/bash
inputData=$(cat /root/users72.csv);
((id=1))
for athleteTable in $inputData
do
echo "$athleteTable" | awk -F',' '{ print "INSERT INTO athletes (id, username, gender, sport_abbreviation) VALUES ('$id', " "\""$1"\"" ", " "\""$3"\"" ", " "\""$5"\""");"}'
((id=id+2))
done > /root/users72.sql
users72.sql 文件的示例如下所示:
INSERT INTO athletes (id, username, gender, sport_abbreviation) VALUES (1, "msza907", "", "");
INSERT INTO athletes (id, username, gender, sport_abbreviation) VALUES (3, "Szabo", "Fencing", "germany");
INSERT INTO athletes (id, username, gender, sport_abbreviation) VALUES (5, "krut825", "", "");
INSERT INTO athletes (id, username, gender, sport_abbreviation) VALUES (7, "Ruth", "Sailing", "norway");
INSERT INTO athletes (id, username, gender, sport_abbreviation) VALUES (9, "sdon251", "", "");
INSERT INTO athletes (id, username, gender, sport_abbreviation) VALUES (11, "Donkov", "Shooting", "bulgaria");
在过去的 7 个小时里,我一直在用头撞墙,试图让它工作,改变语法检查其他示例,我开始认为操作系统中存在故障。如果有人知道哪里出了问题或知道完成此任务的更简单方法可以帮助我,我会很高兴。提前谢谢你。
最佳答案
我肯定同意@GhostCat 的观点,解析 CSV 比仅用逗号分隔要复杂得多,尽管一些简单的 CSV 可能会起作用。不过,CSV 通常可以在字段中包含逗号,因此按逗号拆分会破坏内容。
就是说,您的问题是为什么脚本没有按照您的意愿执行,是您让文件内容发生分词并尝试 awk
每个“单词”。您应该只增加 awk
中的计数器,让它为您读取文件。假设您对原始的 awk
命令感到满意,您可以这样做:
awk -F',' 'BEGIN {id=1} {print "INSERT INTO athletes (id, username, gender, sport_abbreviation) VALUES ( " id " \47"$1"\47, \47"$3"\47, \47"$5"\47);";id+=2}' users72.csv
我们在其中创建了一个本地 id
变量,并且每行将其递增 2。我还使用八进制转义在每个字段周围打印单引号,而不是像您一直在做的那样使用大量引号和转义符。如果您愿意,请随时返回您的方式(或者如果您需要,请使用 \42
作为双引号)。最后,我将其更改为 awk
只打开文件本身,我们可以避免 cat
和管道。
关于将数据添加到数据库的 Linux bash 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39929980/
我创建了一个用户可以添加测试的字段。这一切运行顺利我只希望当用户点击(添加另一个测试)然后上一个(添加另一个测试)删除并且这个显示在新字段中。 所有运行良好的唯一问题是点击(添加另一个字段)之前添加另
String[] option = {"Adlawan", "Angeles", "Arreza", "Benenoso", "Bermas", "Brebant
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a softwar
我正在努力将 jQuery 滚动功能添加到 nav-tab (Bootstrap 3)。我希望用户能够选择他们想要的选项卡,并在选项卡内容中有一个可以平滑滚动到 anchor 的链接。这是我的代码,可
我正在尝试在用户登录后再添加 2 个 ui 选项卡。首先,我尝试做一个之后。 $('#slideshow').tabs('remove', '4'); $("#slideshow ul li:last
我有一个包含选择元素的表单,我想通过选择添加和删除其中一些元素。这是html代码(这里也有jsfiddle http://jsfiddle.net/txhajy2w/):
正在写这个: view.backgroundColor = UIColor.white.withAlphaComponent(0.9) 等同于: view.backgroundColor = UICo
好的,如果其中有任何信息,我想将这些列添加到一起。所以说我有 账户 1 2 3 . 有 4 个帐户空间,但只有 3 个帐户。我如何创建 java 脚本来添加它。 最佳答案 Live Example H
我想知道是否有一种有效的预制算法来确定一组数字的和/差是否可以等于不同的数字。示例: 5、8、10、2,使用 + 或 - 等于 9。5 - 8 = -3 + 10 = 7 + 2 = 9 如果有一个预
我似乎有一个卡住的 git repo。它卡在所有基本的添加、提交命令上,git push 返回所有内容为最新的。 从其他帖子我已经完成了 git gc 和 git fsck/ 我认为基本的调试步骤是
我的 Oracle SQL 查询如下- Q1- select hca.account_number, hca.attribute3, SUM(rcl.extended_amou
我正在阅读 http://developer.apple.com/iphone/library/documentation/iPhone/Conceptual/iPhoneOSProgrammingG
我正在尝试添加一个“加载更多”按钮并限制下面的结果,这样投资组合页面中就不会同时加载 1000 个内容,如下所示:http://typesetdesign.com/portfolio/ 我对 PHP
我遇到这个问题,我添加了 8 个文本框,它工作正常,但是当我添加更多文本框(如 16 个文本框)时,它不会添加最后一个文本框。有人遇到过这个问题吗?提前致谢。 Live Link: JAVASCRIP
add/remove clone first row default not delete 添加/删除克隆第一行默认不删除&并获取正确的SrNo(例如:添加3行并在看到问题后删除SrNo.2)
我编码this ,但删除按钮不起作用。我在控制台中没有任何错误.. var counter = 0; var dataList = document.getElementById('materi
我有一个类似数组的对象: [1:数组[10]、2:数组[2]、3:数组[2]、4:数组[2]、5:数组[3]、6:数组[1]] 我正在尝试删除前两个元素,执行一些操作,然后将它们再次插入到同一位置。
使用的 Delphi 版本:2007 你好, 我有一个 Tecord 数组 TInfo = Record Name : String; Price : Integer; end; var Info
我使用了基本的 gridster 代码,然后我声明了通过按钮添加和删除小部件的函数它工作正常但是当我将调整大小功能添加到上面的代码中时,它都不起作用(我的意思是调整大小,添加和删除小部件) 我的js代
title 323 323 323 title 323 323 323 title 323 323 323 JS $(document).keydown(function(e){
我是一名优秀的程序员,十分优秀!