有一份人員名單,另有一些已上交的文件,文件名包含人員姓名或編號
問題:誰沒交?數組
這實際上是數據結構裏的集合操做
若人員名單爲集合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] } }