【问题标题】:AWK: cannot open "04477C9A875B80.csv" for output (Too many open files)AWK:无法打开“04477C9A875B80.csv”进行输出(打开的文件太多)
【发布时间】:2019-07-20 16:24:11
【问题描述】:

我有一个很大的 CSV 文件,需要将其拆分为多个 CSV 文件,使用第 3 列作为标识符,生成的文件将由第 3 列中的值命名

我正在使用以下内容:

awk -F ',' '{print > ($3".csv")}' playpass.csv

但是我得到了错误:

awk: cannot open "04477C9A875B80.csv" for output (Too many open files)

我知道我需要关闭文件,但经过几次尝试后,我无处可去,现在回到空白画布

我尝试了以下但没有运气,因为我得到了同样的错误

awk -F ',' '{close($1); i++}{print > $1}' query_result_2019-07-20T15_31_42.941Z.csv

有什么建议吗?

【问题讨论】:

  • 您的字段分隔符应与 awk 程序的其余部分分开引用
  • 更新为使用我引用的示例,得到相同的错误
  • 您的问题对我来说有点含糊:您希望在同一个输出文件中的第 3 列中是否有多个具有相同值的行?第 3 列是否已排序?您还没有针对您的问题调整其他答案——i 在这里没用

标签: awk


【解决方案1】:

您试图在打开输出文件之前关闭它以写入它,而不是在您打开它之后。改变这个:

'{close($1); i++}{print > $1}'

到这里:

'{print > $1}{close($1); i++}'

您的脚本当然还有其他问题,但没有示例输入/输出,我不想提出任何建议。

【讨论】:

  • 谢谢 - 将尝试这个,但使用 gawk 代替它已排序
  • 使用 gawk 通过为您处理闭包来解决该错误,但如果您没有像我展示的那样更改代码或完全删除 close(),那么它就是错误的代码。
猜你喜欢
  • 2021-01-15
  • 1970-01-01
  • 2013-04-02
  • 1970-01-01
  • 2015-12-17
  • 2014-06-23
  • 2013-02-01
  • 2012-08-14
  • 1970-01-01
相关资源
最近更新 更多