我需要清理一个csv文件,看起来像这样:
food;1;ZZ;"lipsum";NR
foobar;123;NA;"asking
price";NR
foobar;5;NN;Random text;NN
moongoo;13;VV;"Any label";OO
是的,有时没有双引号,但新行只出现在双引号字段。这个问题只发生在第4个字段。
我使用了一个awk命令,现在我有了这个命令:
awk '{ if (substr($4,1,1) == "\"" && substr($4,length($4)) != "\"") gsub(/\n/," ");}' FS=";" input_file
这个awk检查字段的第一个字符是否是双引号,最后一个字符是否不是双引号,然后尝试删除新行,但他显然没有删除它。
我想我错过了一件"简单"的事情,但不知道是什么。
谢谢你的帮助。
5条答案
按热度按时间z9ju0rcb1#
这可能对您有用(GNU sed):
这将匹配任何不对称的双引号(带或不带转义双引号),追加下一行,删除换行符并重复,直到双引号对称。
放弃转义双引号的更简单解决方案:
3hvapo4f2#
您可以使用此
awk
:工作原理:
ORS
设置为空字符。NF == 4
时打印一个空格,否则打印一个换行符。lf5gs5x23#
使用GNU
sed
ma8fv8wu4#
对于
RT
的GNU awk:0lvr5msh5#
调整OP当前
awk
代码的一个想法是:这将产生: