<span style="font-size:18px;">seq 9 | sed 'H;g' | awk -v RS='' '{for(i=1;i<=NF;i++)printf("%dx%d=%d%s", i, NR, i*NR, i==NR?"\n":"\t")}'</span>
预备知识:
seq:产生一个序列
sed:模式空间和存储空间
H:将pattern space中的内容append到hold
space\n后
g:将存储空间的数据覆盖模式空间
输出的时候使用的模式空间,存储空间只是一个暂存器
1、seq产生1,然后加到sed模式空间,H将模式空间的值追加到存储空间,此时模式空间为1,存储空间为\n1,然后复制到模式空间,这时候模式空间为\n1,最后输出,将\n1传递到awk
awk -v RS=‘‘
‘
{
for(i=1;i<NF;i++){
printf("%dx%d=%d%s",i,NR,i*NR,i==NR?‘\n‘:‘\t‘);
}
}
‘
注:RS=‘‘表示以空行作为分割符
2、seq产生2,然后加到模式空间,此时模式空间为2,存储空间为\n1;H将2追加到存储空间,此时存储空间为\n1\n2;
之后g将\n1\n2复制到模式空间,这时候模式空间为\n1\n2,输出到awk,此时awk处理的是\n1\n2
3、重复上述过程,知道打印完九九乘法表
虽然一句话就实现了九九乘法表,但是相比较高级语言还是有点难啊!
时间: 2024-11-10 16:09:13