再试一次...
我有一份我正在尝试使用SQL分析的调查,有些人使用逗号进行了评论(即“今天病了,需要VitC。”),当我尝试将其加载到SQL中时,逗号是阅读作为分隔符,而不阅读最后一列。
我的csv以逗号分隔,所以我了解发生了什么,我只是不知道如何仅更改文本内的逗号。
我应该以制表符分隔的形式从Google表格下载文件吗?
我可以使用sed,grep,tr或awk将该列(注释部分)中的任何逗号分隔为空格吗?
我在postgresSQL中设置了questionnaire
表,并将comments
列设置为TEXT
。
我将VassarXCTFReadinessQuestionnaire.csv
保存在服务器中。
我正在使用以下方法将VassarXCTFReadinessQuestionnaire.csv
转换为quest_ready.csv
:
cat VassarXCTFReadinessQuestionnaire.csv | cut -d',' -f1-11 | grep -v ',NA' > quest_ready.csv
VassarXCTFReadinessQuestionnaire.csv
中的实际数据:
在评论列中带有评论和逗号:
11/7/18,Jackson Picker,3,3,3,3,4,3,7,"feeling alright, same situation with the hip.",4.1,,
无评论:
11/7/18,Hannah Happy,4,2,2,3,3,4,9,,4.35,,
不带逗号的注释:
11/6/18,Hannah Happy,4,2,2,3,3,4,9,All Good!,4.35,,
quest_ready.csv中所需的结果是:
11/7/18,Jackson Picker,3,3,3,3,4,3,7,"feeling alright same situation with the hip.",4.1,,
11/7/18,Hannah Happy,4,2,2,3,3,4,9,,4.35,,
11/6/18,Hannah Happy,4,2,2,3,3,4,9,All Good!,4.35,,
谢谢!
答案 0 :(得分:0)
粗略的实现,但是:
#!/bin/bash
string=$(grep -o '".*"' my.csv | tr ',' ' ')
before=$(cat my.csv | cut -d',' -f1-9 | grep -v ',NA')
after=$(cat my.csv | cut -d',' -f12 | grep -v ',NA')
echo "${before},${string},${after}"
输出:
11/7/18,Jackson Pierce,3,3,3,3,4,3,7,"feeling alright same situation with the hip.",3.56
答案 1 :(得分:0)
当分隔符可以出现在字段内部时,不能使用cut
选择字段;它没有提供任何转义分隔符的方法。
相反,您应该直接从VassarXCTFReadinessQuestionnaire.csv
复制到数据库表中,而不是先尝试进行转换。
在QUOTE
命令中使用COPY
参数,以便它可以识别带引号的字段,并且不使用逗号作为分隔符。
COPY table_name
FROM '/home/server/file_name.csv'
DELIMITER ','
QUOTE '"'
如果此文件包含与表列不对应的其他字段,请参见