免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: qinghan1125
打印 上一主题 下一主题

如何将文件中的域记录数设置为一样? [复制链接]

论坛徽章:
0
11 [报告]
发表于 2010-08-12 08:49 |只看该作者
比如最多为10域,我想在awk中直接在记录末尾增加(10-NF)个"|'好像行不通,就是如下这个意思,对每条记录
print $0 ("|")\{(10-NF)\}

论坛徽章:
0
12 [报告]
发表于 2010-08-12 09:18 |只看该作者
NF是awk的内置变量
  1. [tmn@linuxserver tmp]$more urfile
  2. PM200808071904+080024A20080807.1800+0800-20080807.1815+0800_445_UtranCell_-_1.xml.gz
  3. [tmn@linuxserver tmp]$awk -F'.' '{print NF}' urfile
  4. 5
  5. [tmn@linuxserver tmp]$
复制代码

论坛徽章:
0
13 [报告]
发表于 2010-08-12 09:23 |只看该作者
那我就不知道你到底想要干什么了,不要让大家猜你的想法

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
14 [报告]
发表于 2010-08-12 09:38 |只看该作者
本帖最后由 昭襄王 于 2010-08-12 09:44 编辑

你最长的是11个域
  1. awk '{print $0 "|||||||||||||||||||||||||||||"}' lines | cut -f -12 -d"|"
复制代码
fdfd|dfdfd|rere|ferer|fdfdf|fdfdf|fdfrerer|rerer|dfd|||
er|er|ddd|13||||||||
noij|3434|fdfdf|3434fdd|dfvv|fdf||||||
fdfd|dfdfd|rere|ferer|fdfdf|fdfdf|fdfrerer|rerer|dfd|dfdfdf|dfe|
fdfd|fd||||||||||
3434|34ddfd|fdfp0|fdf2||||||||

论坛徽章:
0
15 [报告]
发表于 2010-08-12 09:42 |只看该作者

  1. awk -F "|" -v OFS="|" 'NR==FNR{MNF=(MNF>NF)?MNF:NF}NR!=FNR{NF=MNF;print}'数据文件 数据文件
复制代码

论坛徽章:
0
16 [报告]
发表于 2010-08-12 09:45 |只看该作者
你最长的是11个域fdfd|dfdfd|rere|ferer|fdfdf|fdfdf|fdfrerer|rerer|dfd|||
er|er|ddd|13||||||||
noij| ...
昭襄王 发表于 2010-08-12 09:38



    awk '{print $0 "||||||||||"}' lines | cut -f -12 -d"|"  这个例子中的print $0 "||||||||||" 有没有更优的写法?比如用正则表达式来重复"|" 10次?

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
17 [报告]
发表于 2010-08-12 09:48 |只看该作者
awk '{print $0 "||||||||||"}' lines | cut -f -12 -d"|"  这个例子中的print $0 "||||||||||"  ...
qinghan1125 发表于 2010-08-12 09:45

这里没必要吧,只要有运算就有额外开销

论坛徽章:
0
18 [报告]
发表于 2010-08-12 09:52 |只看该作者
本帖最后由 好看的附件 于 2010-08-12 10:31 编辑

我也来个

  1. awk -F'|' 'NR==FNR{if(NF>max)max=NF};NR>FNR{printf $0;for(i=NF;i<max;i++)printf "|";print ""}' file file
复制代码

论坛徽章:
0
19 [报告]
发表于 2010-08-12 11:30 |只看该作者
ly5066113 发表于 2010-08-11 18:39



    借用一下,我觉得下面这个应该也可以的,而且更简单些:


awk 'BEGIN{FS=OFS="|"}NR==FNR{n=NF>n?NF:n;next}{NF=n;print}' urfile urfile

论坛徽章:
23
15-16赛季CBA联赛之吉林
日期:2017-12-21 16:39:27白羊座
日期:2014-10-27 11:14:37申猴
日期:2014-10-23 08:36:23金牛座
日期:2014-09-30 08:26:49午马
日期:2014-09-29 09:40:16射手座
日期:2014-11-25 08:56:112015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:0315-16赛季CBA联赛之山东
日期:2017-12-21 16:39:1915-16赛季CBA联赛之广东
日期:2016-01-19 13:33:372015亚冠之山东鲁能
日期:2015-10-13 09:39:062015亚冠之西悉尼流浪者
日期:2015-09-21 08:27:57
20 [报告]
发表于 2010-08-12 11:57 |只看该作者
回复 19# welcome008


可以,想简单 {NF=n;print} 可以直接写成 NF=n
但这种需要GNU awk,非GNU的是无效的
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP