0

我正在尝试awk按 OSX 第一列中的 id 对大型 csv 文件进行排序。

我开始:

awk -F, 'NR>1 {print > ($1 ".sync")}' file.csv

但是,该进程在 ID s_17 处停止并出现错误:

awk: s_18.sync makes too many open files input record number 37674601, 
file file.csv source line number 1

我尝试使用此close()语句进行修改,但它只写入第一个文件

awk -F, 'NR>1 {print > ($1 ".sync");close($1 ".sync"}' file.csv

谁能提供有关如何在每个文件之后正确关闭文件的见解,以便打开文件的数量保持可控但它们都被写入?

4

2 回答 2

0

因为您关闭了文件,所以您需要使用附加>>运算符,这样您就不会破坏输出文件:

$ awk -F, 'NR>1{f=$1".sync";print >> f;close(f)}' file.csv

查看手册以了解有关使用awk.

于 2013-06-12T17:50:03.970 回答
0

不要用 awk 排序。AWK 非常适合在排序前格式化数据。将输出传送到 sort(1) 并让它对数据进行排序。这就是 sort 所做的,它做得很好。

另外 - 你需要哪种类型的?字典?数字?你需要忽略空格吗?

例子:

sort -t, -n <file
于 2013-06-12T20:31:40.733 回答