如何使用单个awk生成带序号的星期序列 简化多管道shell命令
单awk实现方案
给你两个可选的实现,都不需要额外管道,单个awk进程即可完成需求:
方案1:适配locale的动态生成方案
如果需要适配系统locale的星期缩写(比如中文locale下自动输出中文星期缩写),或者强制输出英文缩写,可使用时间计算逻辑实现,强制英文的话在命令前加LC_TIME=C即可:
LC_TIME=C awk 'BEGIN { # 定位到本周周日的时间戳,%w返回0对应周日,以此为基准偏移计算后续6天 ts = systime() - strftime("%w", systime()) * 86400 for (i = 1; i <=7; i++) { printf "%d %s\n", i, strftime("%a", ts + (i-1)*86400) } }'
如果要把结果存储到文件,只需在命令末尾加> 目标文件路径即可。
方案2:固定英文缩写的极简方案
如果确认只需要固定的英文星期缩写,无需适配locale,直接硬编码输出即可,执行效率最高:
awk 'BEGIN {split("Sun Mon Tue Wed Thu Fri Sat", a); for(i=1;i<=7;i++) print i,a[i]}'
内容的提问来源于stack exchange,提问作者stack0114106
相关产品推荐
相关产品推荐

