需要在TEXT(BASH)中替换逗号

时间:2019-01-17 17:30:05

标签: sql bash postgresql

再试一次...

我有一份我正在尝试使用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,,

谢谢!

2 个答案:

答案 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 '"'

如果此文件包含与表列不对应的其他字段,请参见

Copy a few of the columns of a csv file into a table