对$ 1中的ID进行awk子集化并关闭()

时间:2013-06-12 17:45:36

标签: awk

我正在尝试在OSX的第一列中使用id的awk大型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

任何人都可以正确地提供关于如何在每个文件之后关闭文件的见解,以便打开文件的数量保持可管理但是它们都被写入了吗?

2 个答案:

答案 0 :(得分:0)

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

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

使用awk查看有关重定向的官方字词manual

答案 1 :(得分:0)

不要用awk排序。 AWK非常适合在排序之前格式化数据。将输出传递给sort(1)并让它对数据进行排序。这是什么类型,它做得很好。

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

示例:

sort -t, -n <file