用awk计算表中字母的出现次数

时间:2016-06-23 09:27:47

标签: awk

我有一个与此类似的文件:

location1 person1 -
location2 person1 a
location3 person1 c
location2 person2 x
location1 person2 -
location3 person2 -

每个文件在不同位置为每个人提供多个条目(请注意每个人的位置顺序不同)。第三列是字母或' - '。

我有awk读取文件,我想生成一个结果表:

person location1 location2 location3
person1 0 1 1
person2 0 1 0

如果有人和地点的字母,则在表格中记录为1,如果原始表格中有“ - ”,则在结果表中将其记录为0。

我的谦虚尝试(它运行不正常,但至少我认为关联数组应该在代码中的某处):

awk -F" " '{if($3!="-") a[$2]=$1} END {for (k in a) print k} file.txt

1 个答案:

答案 0 :(得分:1)

将数据存储在wannabe矩阵中,然后遍历存储的位置和人员!

{
seen[$1 FS $2]=(($3 == "-") ? "-"  0 : 1);
locs[$1]
people[$2]
}
END {
      for (loc in locs) 
        printf "\t%s", loc
      print ""
      for (person in people) {
          printf "%s%s", per, FS
          for (loc in locs) 
              printf "%d\t", seen[loc FS person]
          print ""
       }
}

看到它的实际效果:

$ awk -f a.wk your_file
location1   location2   location3
person1 0   1   1   
person2 0   1   0