我有一个与此类似的文件:
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
答案 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