我有一个CDR文件(.CSV),它包含大约150列,是一个非常大的文件。我试图获得第31列应具有值的输出" 13"。
我尝试使用以下命令:
onScroll
但是收到以下错误:
awk -F',' '$31~/^13/' report_1.csv > report_2.csv
任何帮助?
答案 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
,当然,处理这么大的文件可能会很慢。