免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 2954 | 回复: 10
打印 上一主题 下一主题

最近發現的幾個小技巧 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-07-02 18:58 |只看该作者 |倒序浏览
在網上抓到的有幾個 printf 小技巧,POSIX 兼容的應可使用
第一個以前說過了, 格式化成這樣可在每三個數字加,
[victor@localhost ~]$ printf "%'d\n" 1234567
1,234,567
[victor@localhost ~]$

但在cygwin 下的bash 用不到,原因不明。只好用以下腳本代替,可不是我寫的
#!/bin/bash
NumberIn=$1
NumberLength=${#NumberIn}
NumberOut=""
Count=0

for (( i= $NumberLength - 1; i >= 0 ; i-- )) ; do
        if [ $Count -ne 0 ] && [ $(($Count % 3)) -eq 0 ] ; then
                NumberOut=","$NumberOut ; fi
        NumberOut=${NumberIni:1}$NumberOut
        (( Count += 1 ))
done
echo $NumberOut
exit 0

在很多的語言下,都可以將子母取得 十進制的 ascii 編碼,如 ruby
[victor@localhost ~]$ ruby -e 'puts ?a'
97
在 shell 下可用外部程式幫忙,如
[victor@localhost ~]$ echo "a" | od -An -tu1 | awk '{print $1}'
97
但其實 printf 也可取得
[victor@localhost ~]$ printf '%d\n' "'a"
97
[victor@localhost ~]$

只要以十進制整數格式打印 . '%d\n' , 配合 "'字母" 就成。

第三個是 printf 可用打印空格, 以如下格式
printf '%*s\n' 數字, 數字是整數, 如
[victor@localhost ~]$ printf '%*s\n' 20 | tr ' ' '#'
####################
[victor@localhost ~]$ printf '%*s\n' 30 | tr ' ' '#'
##############################
[victor@localhost ~]$

為了顯示,將空格換成 #

歡迎交流,有錯請指正,謝謝 。

论坛徽章:
7
荣誉版主
日期:2011-11-23 16:44:17子鼠
日期:2014-07-24 15:38:07狮子座
日期:2014-07-24 11:00:54巨蟹座
日期:2014-07-21 19:03:10双子座
日期:2014-05-22 12:00:09卯兔
日期:2014-05-08 19:43:17卯兔
日期:2014-08-22 13:39:09
2 [报告]
发表于 2007-07-02 20:19 |只看该作者
不错!谢谢分享。

论坛徽章:
0
3 [报告]
发表于 2007-07-02 20:26 |只看该作者
多謝頂貼,小弟灌水騙多一分

论坛徽章:
0
4 [报告]
发表于 2007-07-02 20:27 |只看该作者
原帖由 twf_cc 于 2007-7-2 20:26 发表
多謝頂貼,小弟灌水騙多一分



此回复有被waker调戏概率...

论坛徽章:
8
摩羯座
日期:2014-11-26 18:59:452015亚冠之浦和红钻
日期:2015-06-23 19:10:532015亚冠之西悉尼流浪者
日期:2015-08-21 08:40:5815-16赛季CBA联赛之山东
日期:2016-01-31 18:25:0515-16赛季CBA联赛之四川
日期:2016-02-16 16:08:30程序设计版块每日发帖之星
日期:2016-06-29 06:20:002017金鸡报晓
日期:2017-01-10 15:19:5615-16赛季CBA联赛之佛山
日期:2017-02-27 20:41:19
5 [报告]
发表于 2007-07-02 20:47 |只看该作者
printf '%*s\n' 20 省略第三个参数的用法甚妙

to Edengundam
这下你失望了吧?

论坛徽章:
0
6 [报告]
发表于 2007-07-02 20:50 |只看该作者
多謝版主不殺之恩..

论坛徽章:
0
7 [报告]
发表于 2007-07-02 21:58 |只看该作者
顶帖
printf功能的确很强,但速度比起echo来慢很多,需要考虑效率时要注意

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
8 [报告]
发表于 2007-07-03 00:36 |只看该作者
学习 ^_^

论坛徽章:
0
9 [报告]
发表于 2007-07-03 01:06 |只看该作者
printf '%d\n' "'a"

字母前为啥加个  '     符号?

论坛徽章:
0
10 [报告]
发表于 2007-07-03 07:51 |只看该作者
原帖由 大蚂蚁 于 2007-7-3 01:06 发表
printf '%d\n' "'a"

字母前为啥加个  '     符号?



printf文档上描述了...

你扫一眼, 上面大概说, 要打印字符的ascii编码值, 必须前导一个', 否则就会报错.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP