当我在unix机器上尝试"cal | tail -6“时,我得到-
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但是当我试着"cal | tail -6 | awk '{print $7}'“的时候,我得到了-
10
17
243将走向何方?我的需求基本上是所有工作日,即第2、3、4、5和6列。但由于"cal“的奇怪行为,我得到了错误的输出。
发布于 2012-11-13 05:49:51
由于每行中的所有列都是三个字符宽,因此可以使用它来提取您希望的日期。例如,如果您只想要列中的第7天,则可以执行以下操作:
cal | sed 's/^\(.\{18\}\).*$/\1/'此命令将删除该行中的前18个字符,这些字符是一周的前6天的条目。
要提取特定的一天,例如第四天,您可以这样做:
cal | sed 's/^.\{9\}\(.\{3\}\).*$/\1/'要删除一周的第一天和最后一天,您可以执行以下操作:
cal | sed -e 's/^.\{3\}//' -e 's/^\(.\{15\}\).\{3\}$/\1/'发布于 2012-11-13 01:32:53
在第一行中只有3个空格分隔的列。你没有理解awk是如何工作的,cal的工作是完全正确的。就awk而言,第一行中没有第7列,因为它关注的是空格分隔的列,而不是固定宽度的列。
在谷歌上快速搜索一下,就会发现你可以使用
BEGIN { FIELDWIDTHS = "3 3 3 3 3 3 3" }在您的awk脚本中。
发布于 2012-11-13 05:56:31
可能是逐行提取就行了。试试ncal。例如:
$ ncal
November 2012
Mo 5 12 19 26
Tu 6 13 20 27
We 7 14 21 28
Th 1 8 15 22 29
Fr 2 9 16 23 30
Sa 3 10 17 24
Su 4 11 18 25https://stackoverflow.com/questions/13348490
复制相似问题