有一份人员名单,另有一些已上交的文件,文件名包含人员姓名或编号
问题:谁没交?数组
这实际上是数据结构里的集合操做
若人员名单为集合A,文件名为集合B,则没交的人员集合C=A-B数据结构
名单(list.txt):
1 a
2 b
3 c
4 d
5 e
文件列表:
a_1.xls
b.xls
3.xls
谁没交?
d,ecode
#~ ls 文件夹/ | gawk -f set.awk list.txt - BEGIN { op = "diff" # 默认求差集;交集为inst } #~ 第一个文件为完整名单 FILENAME == ARGV[1] { #~ num = $1 #~ name = $2 for (i=1; i<=NF; i++) { a[NR, i] = $i # 取出各项 } nf = NF # 假定项数固定 } # 名单(模拟二维数组)关联项处理 function handle(a, i, o) { for (j=1; j<=nf; j++) if ((i, j) in a) # 判断索引存在 switch (o) { case "print": case "inst": print a[i, j] break case "diff": delete a[i, j] # 剩余项为差集 break } } #~ 后面的为文件列表 FILENAME == ARGV[2] { #~ print length(a) for (i in a) { #~ print bname,bnum,a[i, 2],a[i, 1],$0 if (match($0, a[i])) { # 若任一项能匹配(search的中文支持彷佛有问题) split(i, ss, SUBSEP) idx = ss[1] # 名单索引 #~ print ss[1],ss[2] handle(a, idx, op) next } } } END { if (op == "diff") { for (i in a) print a[i] } }