CSV中不带分隔符的NULL

CSV中不带分隔符的NULL,csv,awk,sed,Csv,Awk,Sed,我的Linux机器中有一个csv文件,我试图在其中进行一些查询。 但是csv中的一些列有空值,并且它不在分隔符中表示,因此我发现很难查询其他列,因为它们的一致性不好 现在的格式是: col1,col2,col3,col4,col5... col23 "val1","val2",NULL,"Val3","val4","val5",...,"val23" "val1&q

我的Linux机器中有一个csv文件,我试图在其中进行一些查询。 但是csv中的一些列有空值,并且它不在分隔符中表示,因此我发现很难查询其他列,因为它们的一致性不好

现在的格式是:

col1,col2,col3,col4,col5... col23 
"val1","val2",NULL,"Val3","val4","val5",...,"val23"
"val1","val2","val2",NULL,"val4","val5",...,"val23"
我正在尝试替换不同列中的NULL,以使其周围有分隔符

awk -F "," 'BEGIN {OFS="\",\""} $3 == "NULL" { $3 = "\"NULL\"" } {print $3}' file1.csv 
到目前为止,我已经试着和awk一起玩了,但似乎没有任何效果。是否有更好的方法或有人可以帮助执行上述命令?

替换不同列中的空值,并在其周围加引号:


考虑到您的输入文件与所示示例相同,请尝试以下内容

awk' 开始{ FS=OFS=, } { gsub/NULL/\&\ } 1'输入文件
还可以使用sed命令替换所有空值。这是一个简单而简短的命令

sed -i 's/NULL/"NULL"/g' YourFileName

哦,顺便说一句,看看你的,我想你需要检查一下:@EmmaVaze:你为什么想要分隔符?允许使用引号,但通常CSV字段中不需要引号,CSV解析器应该能够读取带引号和不带引号的字段内容。如何使其成为永久性更改?您的意思是如何将其更改为原始文件?这个答案对此进行了讨论,请根据您的awk查看前两个答案:几乎,但是如果空值已经被双引号包围了怎么办?因此,您需要sed-Ei的/\[^]NULL[^]/\1NULL\2/g文件。但是,这不会捕获连续的空值,因此需要sed-Ei:a;s/[^]NULL[^]/\1NULL\2/g;ta'文件。如果字段是fooNULLbar呢?即使有@potongs的改进,你最终也会得到foo,fooNULLbar,bar。
col1,col2,col3,col4,col5... col23 
"val1","val2","NULL","Val3","val4","val5",...,"val23"
"val1","val2","val2","NULL","val4","val5",...,"val23"
sed -i 's/NULL/"NULL"/g' YourFileName