再试一次...
我有一个调查,我正在尝试用SQL分析,有些人使用逗号进行了评论(即“今天病了,需要维生素C”)当我试图将它加载到SQL中时,逗号是作为分隔符读取的,而不是读取最后一列。
我的csv是用逗号分隔的,所以我知道发生了什么,我只是不知道如何只更改文本中的逗号。
我应该以制表符分隔的方式从google sheets下载文件吗?
我可以使用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.csvVassarXCTFReadinessQuestionnaire.csv中的实际数据
W/注释列中的注释和逗号:
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,,谢谢!
发布于 2019-01-18 01:44:35
粗略的实现,但是:
#!/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
发布于 2019-01-18 02:24:38
当分隔符可以出现在字段内时,不能使用cut选择字段;它不提供任何转义分隔符的方法。
相反,您应该直接从VassarXCTFReadinessQuestionnaire.csv复制到数据库表中,而不是先尝试转换它。
在COPY命令中使用QUOTE参数,这样它就可以识别带引号的字段,并且不会使用内部的逗号作为分隔符。
COPY table_name
FROM '/home/server/file_name.csv'
DELIMITER ','
QUOTE '"'如果此文件包含与表列不对应的额外字段,请参见
https://stackoverflow.com/questions/54241309
复制相似问题