我想把一个包含一周中的几天的列表转换成一个类似于表格的格式。
输入如下:
Mon 0100
Mon 0700
Tue 0700
Wen 0100
Wen 0700
Thu 0100
Thu 0700
Fri 0100
Fri 0700
Sat 0100
Sun 0100
Sun 0700
输出如下:
Mon Tue Wed Thu Fri Sat Sun
0100 X X X X X X
0700 X X X X X X
在awk中寻找理想的答案。最好在输出中保留格式。在不存在工作日的情况下,不应该包含它(如果可能的话,如果输入中不存在,则在输出中包含缺少的工作日,这将是很好的)。
我试了一下,但是除了打印第一行之外,我真的无法理解数组的构造,尽管我认为它相对简单。
谢谢
厄尔
最佳答案
以下是使用awk
的一种方法:
awk '
!($1 in day) { days[++d] = $1; day[$1]++ }
!($2 in num) { nums[++n] = $2; num[$2]++ }
{ map[$1,$2]++ }
END {
printf "\t"
for (i=1; i<=d; i++) {
printf "\t%s", days[i]
}
print ""
for (j=1; j<=n; j++) {
printf "%s ", nums[j]
for (i=1; i<=d; i++) {
printf "\t%s", (map[days[i],nums[j]] ? "X" : FS )
}
print ""
}
}' file
输出:
Mon Tue Wen Thu Fri Sat Sun
0100 X X X X X X
0700 X X X X X X