Unix Kornshell-如何正确打印空白和校准
我正在使用这个命令Unix Kornshell-如何正确打印空白和校准,unix,sed,ksh,cal,Unix,Sed,Ksh,Cal,我正在使用这个命令 cal $month $year | sed -n '1,2p' cal $month $year | sed -n '3,$p' | sed -n '/'$day'/{s/.*\('$day'.*\)/\1/p; :a; n; p; ba; }' 它给了我这个输出 March 2014 Su Mo Tu We Th Fr Sa 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
cal $month $year | sed -n '1,2p'
cal $month $year | sed -n '3,$p' |
sed -n '/'$day'/{s/.*\('$day'.*\)/\1/p; :a; n; p; ba; }'
它给了我这个输出
March 2014
Su Mo Tu We Th Fr Sa
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
如何获得此输出
仅供参考:$month$year$day
正在使用当前日期。
我试图避免使用一定数量的空格,因为如果是不同的一天,那么这些数字将与空格不匹配
编辑:乔纳森·莱弗勒
谢谢大家!!这是真的越来越接近我所期待的输出。您发布的示例输出正是我想要的,但是在尝试了您的代码之后。它给了我这个
2014年3月
苏莫图我们是法国的
2 3 4 5问题6 7 8
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
我如何才能删除带有Q的行?我假设这是来自您提供的第二个s//
编辑:
想清楚了,谢谢你的帮助 一个
awk
脚本以达到预期效果:
校准awk:
# Print first two lines (heading)
NR < 3 { print; next }
# Skip weeks in which the last day is before variable 'day'
$NF < day { next }
# Print full weeks if the first day is on or after variable 'day'
$1 >= day { print; next }
# This will be executed for the week on which variable 'day' falls.
{
# Traverse each day
for (i=1; i<=NF; ++i) {
# If current day is on or after variable 'day', print it.
if ($i >= day) {
if ($i < 10) # Check for extra formatting for single digit days
printf(" ");
printf("%d ", $i);
}
else
printf " "; # Formatting for blank days
}
print ""; # Add new line
}
这个脚本很有效(我认为):
样本输出:
March 2014
Su Mo Tu We Th Fr Sa
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
- 第一个
命令在要保留的日期之前放置一个Q(不是s//
输出的一部分)李>cal
- 标签
,:空格
和s//
用空格串和另一个空格替换一个空格串和一个非空格、一个非Q,将Q前面的所有非空格字符进行重映射t空格
删除标记并打印线条s/Q//p
- 代码的其余部分与之前相同(但分布在多行上);它获取下一行输入并重复打印
日=4
,月=3
,年=2014
。最好创建一个SSCCE(),在本例中,这意味着显式设置三个变量。那里有太多的sed
命令;你应该能一次完成这一切。
cal $month $year | awk -v day=$day -f cal.awk
year=2014
month=3
day=6
cal $month $year | sed -n -e '
1,2p
3,${/'$day'/{
s/^\(.*\)\('$day'.*\)/\1Q\2/
:blanks
s/^\( *\)[^ Q]/\1 /g
t blanks
s/Q//p
:a
n
p
ba
}
}'
March 2014
Su Mo Tu We Th Fr Sa
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