Chinaunix
标题:
如何补齐使用shell补齐文件
[打印本页]
作者:
lovegod1206
时间:
2013-10-17 21:43
标题:
如何补齐使用shell补齐文件
1|2|3|4|5|a
1|2|b
1|2|3|b
1|a
1|2|3|4|a
--->
1|2|3|4|5|a
1|2||||b
1|2|3|||b
1|||||a
1|2|3|4||a
请大侠帮忙使用shell补齐文件,分割符是|,每行字段数为6,如果某行少于6个字段,那么有数字的输出,后面直接加分隔符|,最后一个字段放最后。
作者:
lovegod1206
时间:
2013-10-17 21:50
实际文件有几十万,字段有100多个,高手回复下,急。。3Q
作者:
yaozhibing41001
时间:
2013-10-17 22:23
本帖最后由 yaozhibing41001 于 2013-10-17 22:25 编辑
回复
2#
lovegod1206
高手这个点都睡觉了,只有我们这些菜鸟了,
作者:
liion631818
时间:
2013-10-17 22:41
awk -F"|" -vOFS="|" '{t=$NF;$NF="";for(i=1;i<6;i++){printf $i OFS}; print t}'
复制代码
作者:
yaozhibing41001
时间:
2013-10-17 22:54
给你来个复杂点的。
[root@localhost ~]# awk -vFS='|' '{if(NF<6){for(i=1;i<=NF-1;i++){printf $i"|"}{for(l=1;l<=6-i;i++){printf "|"}}print $NF} else {print $0}} ' a
1|2|3|4|5|a
1|2||||b
1|2|3|||b
1|||||a
1|2|3|4||a
复制代码
作者:
lovegod1206
时间:
2013-10-17 22:58
谢谢,解决了
作者:
关阴月飞
时间:
2013-10-17 23:14
回复
1#
lovegod1206
awk -F\| 'FNR==NR{if(NF>a)a=NF;next}a>NF{b=$NF;NF--;for(i=1;i<a;i++)$i=$i;$a=b}1' OFS=\| urfile urfile
复制代码
作者:
WilliBhamlll
时间:
2013-10-17 23:35
awk -F '|' '{for(i=0;i++<NF-1;)a[NR,i]=$i;b[NR]=$NF;l=l<NF?NF:l}END{for(i=0;i++<NR;){for(j=0;j++<l-1;)printf a[i,j]?a[i,j]"|":"|";print b[i]}}' file
复制代码
作者:
klainogn
时间:
2013-10-17 23:54
本帖最后由 klainogn 于 2013-10-18 00:17 编辑
awk -F'|' '{a=$NF;$NF="";$0=$1FS$2FS$3FS$4FS$5FS""a}1' a.txt
400万行 10s完成
作者:
LikeLx
时间:
2013-10-18 13:36
awk -F "|" '{t=$NF;$NF="";for(i=1;i<6;i++) printf $i"|";print t}'
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2