如何在.CSV文件中使用awk命令搜索结果

时间:2017-11-04 11:51:35

标签: unix awk grep

我有一个CDR文件(.CSV),它包含大约150列,是一个非常大的文件。我试图获得第31列应具有值的输出" 13"。

我尝试使用以下命令:

onScroll

但是收到以下错误:

awk -F',' '$31~/^13/' report_1.csv > report_2.csv

任何帮助?

3 个答案:

答案 0 :(得分:1)

我建议:

awk -F',' '$31 == "13"' report_1.csv > report_2.csv

答案 1 :(得分:1)

字段数量限制不应低至150,因此我猜测您可能无法正确解析您的CSV文件

如果某个特定内容,您不应该只分割任何逗号 - 您应该避免在引用字段(,)内"like,this"分割。

如果你正在使用GNU awk,通过FPAT(根据@Ed Morton的this excellent answer)进行正确的CSV解析非常简单:

awk -v FPAT='[^,]*|"[^"]+"' '$31 ~ /^13/' file

或者,对于完全匹配:

awk -v FPAT='[^,]*|"[^"]+"' '$31 == "13"' file

在非GNU awk的情况下,请参阅引用的答案以获得替代解析方法。

答案 2 :(得分:0)

awk的某些实现具有最大列数。例如mawk。您可以通过分配到NF来轻松测试,如下所示:

$ mawk 'BEGIN{NF=32768}'
mawk: program limit exceeded: maximum number of fields size=32767
        FILENAME="" FNR=0 NR=0

要解决此问题,您可以使用GNU awk,gawk,它没有明确的限制。

$ gawk 'BEGIN{NF=32768}'
$ gawk 'BEGIN{NF=1000000}'

嗯,它仍受可用内存量的限制。 (但这应该允许你在普通电脑上至少有数百万个字段)。

PS:您可能需要安装gawk,当然,处理这么大的文件可能会很慢。