免费注册 查看新帖 |

Chinaunix

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

求助,怎样用命令实现输出 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-07-14 18:59 |只看该作者 |倒序浏览
本帖最后由 393051431 于 2012-07-14 19:02 编辑

一个文本名为li.txt的文本内空为:
3889190001124111368241
3889020001123110876545
3889190001123110776505
.................
文本的每行内容为了22位数
如何实现用"|"符号输出以下格式
388|9|1900|1|1231|13682|41
388|9|200|1|1231|108765|45
388|9|1900|1|1231|107765|5
............
说明按
  A段 | B段  | C段 | D段  |  E段 |   F段 |   G段
3位数|1位数|4位数|2位数|4位数|6位数|2位数    分开

其中C段数值小1000的,如0200变成200 ,0800变了800
      G段数值小100的,如05变了5,
      D段01变为1

论坛徽章:
1
辰龙
日期:2014-05-22 11:38:58
2 [报告]
发表于 2012-07-14 19:13 |只看该作者
  1. $ awk -vFIELDWIDTHS='3 1 4 2 4 6 2' -vOFS='|' '{for(i=1;i<=NF;i++)$i=sprintf("%d", $i)}1' urfile
  2. 388|9|1900|1|1241|113682|41
  3. 388|9|200|1|1231|108765|45
  4. 388|9|1900|1|1231|107765|5
复制代码

论坛徽章:
0
3 [报告]
发表于 2012-07-14 20:11 |只看该作者
本帖最后由 393051431 于 2012-07-14 20:12 编辑

太谢谢你了
如果反过来
388|9|1900|1|1231|13682|41
388|9|200|1|1231|108765|45
388|9|1900|1|1231|107765|5

变成
3889190001124111368241
3889020001123110876545
3889190001123110776505
如何写命令

论坛徽章:
0
4 [报告]
发表于 2012-07-14 21:20 |只看该作者
回复 3# 393051431
  1. [root@server tmp]# awk -F '|' '{printf "%04d\n",$3}' 1.txt
  2. 1900
  3. 0200
  4. 1900
复制代码
只能想到的笨办法,for循环和if判断是第几个字段,这个字段的宽度,用printf格式话输出。

不知道别的大神有什么好思路没
   

论坛徽章:
5
未羊
日期:2014-08-04 16:15:21天秤座
日期:2014-08-13 13:52:372015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:56:112015亚冠之浦和红钻
日期:2015-06-29 15:30:48
5 [报告]
发表于 2012-07-14 22:17 |只看该作者
  1. tr -d "|"
复制代码
反过来就容易多了。。。。

论坛徽章:
0
6 [报告]
发表于 2012-07-15 09:13 |只看该作者
问一下,我的为什么没有分割开来.
>>> echo 3889190001123110776505 | awk -vFIELDWIDTHS='3 1 4 2 4 6 2' -vOFS='|' '{for(i=1;i<=NF;i++) $i=sprintf("%d", $i)}1'
2147483647

论坛徽章:
1
辰龙
日期:2014-05-22 11:38:58
7 [报告]
发表于 2012-07-15 09:41 |只看该作者
本帖最后由 winway1988 于 2012-07-15 09:42 编辑
  1. $ awk -vgroup="3|1|4|2|4|6|2" -vFS="|" 'BEGIN{split(group,a)}{for(i=1;i<=NF;i++){fmt=sprintf("%%0%dd",a[i]);printf(fmt,$i)}printf("\n")}' urfile
  2. 3889190001124111368241
  3. 3889020001123110876545
  4. 3889190001123110776505
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP