bash / zsh:源代码行中的参数非法

问题描述 投票:0回答:1

下午好! 我正在尝试解析一个由逗号分隔的文件(CSV 文件)。想象一下书籍及其作者的列表,第二列是作者。由于该文件有数百万行(大约 133M),我无法使用 Python 或 Java 执行此操作(我的意思是,我可以,但需要太长时间),所以我决定使用 bash 或 zsh (这是安装在Mac)。

我需要计算每个作者有多少本书,这意味着,计算第二列中每个唯一值的出现次数。

#!/bin/zsh

awk -v FS="," 'NR > 1 {        
  author_id = $2;              
  count[$author_id]++;         
} 
END {                            
  PROCINFO["sorted_in_place"] = 1;  
  for (author_id, count) in count; {
    printf "%d, %d\n", author_id, count;  
  }
}' "~/list_of_books_per_author.csv" | sort -nrk2,2 | head -n 10

我不断收到此错误:

awk: syntax error at source line 7
 context is
      for >>>  (author_id, <<<
awk: illegal statement at source line 7
awk: illegal statement at source line 7

我真的不知道我现在做错了什么。当您需要值、键和值时,如何迭代关联数组?

awk zsh
1个回答
0
投票

您尝试循环关联数组时使用了完全错误的语法。你想要

  for author_id in count {
    printf "%d, %d\n", count[author_id], author_id;  
  }

另请注意左大括号之前不应有分号。

© www.soinside.com 2019 - 2024. All rights reserved.