我在csv数据中有以下数据。一些列有数据,而在那些没有数据的列中,放置了分号。这不能更改。以下是三行的示例:
first;;;;;
;;Second;;;;
;;;"Third;Fourth";;;
;;"Fifth;Sixth";;;
我想得到分号个数不等于6的行。而且,我想只计算双引号之外的分号。所以第三行不应该计算为等于6。第四行也应该包括在内,因为双引号之外的分号个数不等于6。
我使用以下代码
TARGETFILE=data.csv
variable=$(awk -F ';' 'NF != 7' <$TARGETFILE)
我怎样才能得到分号个数不等于6的行?
6条答案
按热度按时间watbbzwu1#
如果你有
GNU awk
,这个一行程序应该可以做到:或者,您可以使用此
sed
解决方案:xxls0lw82#
使用任何awk:
或者,如果您愿意:
luaexgnf3#
如果您只需要带有六个分号的行,
grep
可以处理这个问题。甚至给出了行号。
jmo0nnb34#
借用保罗的例子:
但对于原始测试样品,必须对其进行轻微修改
(
NF-7
实现了与'NF != 7'
相同的效果,而无需shell引用它)smdnsysy5#
CSV格式比它第一次出现时要复杂得多。例如,我认为在字符串中使用双引号的方法是使用两个双引号:“"。我怀疑上述解决方案是否能处理这些问题,但现在没有精力去分析它们。我认为,要正确处理这个问题已经足够坚韧了,你真的需要一个专门的程序来处理所有的边缘情况。
qgelzfjb6#
重用Pauls文件:
您可以使用Ruby来计算字段:
图纸:
如果要筛选具有7个字段的行:
图纸:
注意:与计算字段分隔符相比,计算数据字段的数量少一个: