我试图提取和打印文件的标题,如果该特定列中的模式匹配。
这里是一个例子:
[user ~]$ cal |sed 's/July 2014//' Su Mo Tu We Th Fr Sa 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
预期产出:
如果inputdate= 31,则打印31日的一天。
只是要清楚,我不能使用date-d标志作为我的操作系统不支持。可能需要awk在这里来解决这个问题。
[user ~]$ date -d 20140731 +%A Thursday
我希望我能够清楚地expression我的疑问和关注。
这是一个gnu awk
解决方案:
cal | awk -v date=31 -v FIELDWIDTHS="3 3 3 3 3 3 3 3" 'NR==2 {split($0,a)} {for (i=1;i<=NF;i++) if ($i==date) print a[i]}' Th
您将您想要显示的date
设置为一个变量,因此可以根据您的喜好进行更改。
或者可以这样写:
cal | awk 'NR==2 {split($0,a)} {for (i=1;i<=NF;i++) if ($i==date) print a[i]}' FIELDWIDTHS="3 3 3 3 3 3 3 3" date=31
PS FIELDWIDTH
在gnu awk 2.31
引入
使用awk:
cal | awk -v date=31 'NR == 2 { split($0, header) } NR > 2 { for (i = 1; i <= NF; ++i) if ($i == date) { print header[NR == 3 ? i + 7 - NF : i]; exit } }'
输出:
Th
解析cal
的输出结果并不是那么明智的…
你的操作系统的date
处理-j
?
date -j 073100002014 "+%a" Thu
你的操作系统在perl
怎么样?
perl -MDateTime -E '$dt=DateTime->new(year=>2014,month=>7,day=>31);say $dt->day_name' Thursday
或者,如果它不做perl -E
,你可以做
perl -MDateTime -e '$dt=DateTime->new(year=>2014,month=>7,day=>31);print $dt->day_name' Thursday
你的操作系统如何在php
?
php -r '$jd=cal_to_jd(CAL_GREGORIAN,7,31,2014);echo(jdk($jd,2));' Thu