免费注册 查看新帖 |

Chinaunix

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

[文本处理] 文本文件每一行的指定列插入分隔符 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-09-15 12:45 |只看该作者 |倒序浏览
有一个定长文件a,我想在它的每一行特定位置插入分隔符 "|"  比如在每一行的第5个和第6个字符之间插入|   

该怎么写命令实现呢?最好稍微解释一下


求路过的大神指教

论坛徽章:
54
2015亚冠之德黑兰石油
日期:2015-07-07 13:00:1615-16赛季CBA联赛之深圳
日期:2016-03-31 09:03:5415-16赛季CBA联赛之辽宁
日期:2016-05-09 20:38:15程序设计版块每日发帖之星
日期:2016-05-12 06:20:0015-16赛季CBA联赛之四川
日期:2016-05-13 15:19:4715-16赛季CBA联赛之福建
日期:2016-05-15 20:24:34每日论坛发贴之星
日期:2016-05-16 06:20:0015-16赛季CBA联赛之吉林
日期:2016-05-26 11:49:4715-16赛季CBA联赛之广东
日期:2016-05-26 13:49:18极客徽章
日期:2016-12-07 14:05:2315-16赛季CBA联赛之广夏
日期:2016-12-20 17:33:532017金鸡报晓
日期:2017-01-10 15:19:56
2 [报告]
发表于 2015-09-15 12:52 |只看该作者
本帖最后由 haooooaaa 于 2015-09-15 13:42 编辑
  1. [root@test /tmp]$ echo "1234567890" | awk '{$0=substr($0,0,5)"|"substr($0,6)}1'
  2. 12345|67890
复制代码
看了 4 楼的....

然后
  1. [root@test /tmp]$ echo "1234567890" | awk '{$0=gensub(".","&|",5,$0)}1'
  2. 12345|67890
复制代码

论坛徽章:
20
卯兔
日期:2015-01-26 22:05:142015亚冠之萨济拖拉机
日期:2015-09-10 15:15:282015亚冠之阿尔希拉尔
日期:2015-09-25 17:37:53程序设计版块每日发帖之星
日期:2015-10-03 06:20:00程序设计版块每日发帖之星
日期:2015-12-09 06:20:00CU十四周年纪念徽章
日期:2015-12-17 09:07:15程序设计版块每日发帖之星
日期:2015-12-25 06:20:34程序设计版块每日发帖之星
日期:2015-12-25 06:20:34程序设计版块每日发帖之星
日期:2015-12-25 06:20:342015亚冠之广州富力
日期:2015-08-27 19:29:56每日论坛发贴之星
日期:2015-08-26 06:20:002015亚冠之阿尔希拉尔
日期:2015-05-18 17:26:27
3 [报告]
发表于 2015-09-15 12:52 |只看该作者
回复 1# shitou773
  1. (tcp)~> echo '123456789' | awk -vFIELDWIDTHS='5 100' '{NF+=0}1' OFS="|"
  2. 12345|6789
  3. (tcp)~> echo '123456789' | sed -r 's#.{5}#&|#'
  4. 12345|6789
  5. (tcp)~>
复制代码

论坛徽章:
5
白羊座
日期:2014-10-28 11:23:27水瓶座
日期:2015-01-20 10:19:022015亚冠之柏斯波利斯
日期:2015-07-11 18:17:2015-16赛季CBA联赛之同曦
日期:2015-12-23 12:38:582016猴年福章徽章
日期:2016-02-18 15:30:34
4 [报告]
发表于 2015-09-15 12:59 |只看该作者
  1. echo "1234567" | sed 's/./&|/5'
复制代码

评分

参与人数 1可用积分 +4 收起 理由
MMMIX + 4 赞一个!

查看全部评分

论坛徽章:
0
5 [报告]
发表于 2015-09-15 16:28 |只看该作者
这样的却可以插入,但是要是我想操作的文件有上万行,每行需要插入的位置有好几个(具体位置会根据一个数组来定)又该怎样实现呢?回复 2# haooooaaa


   

论坛徽章:
0
6 [报告]
发表于 2015-09-15 16:30 |只看该作者
回复 4# klainogn

你这样也可以插入,但是要是我想操作的文件有上万行,每行需要插入的位置有好几个(具体位置会根据一个数组来定)又该怎样实现呢?求指教

   

论坛徽章:
54
2015亚冠之德黑兰石油
日期:2015-07-07 13:00:1615-16赛季CBA联赛之深圳
日期:2016-03-31 09:03:5415-16赛季CBA联赛之辽宁
日期:2016-05-09 20:38:15程序设计版块每日发帖之星
日期:2016-05-12 06:20:0015-16赛季CBA联赛之四川
日期:2016-05-13 15:19:4715-16赛季CBA联赛之福建
日期:2016-05-15 20:24:34每日论坛发贴之星
日期:2016-05-16 06:20:0015-16赛季CBA联赛之吉林
日期:2016-05-26 11:49:4715-16赛季CBA联赛之广东
日期:2016-05-26 13:49:18极客徽章
日期:2016-12-07 14:05:2315-16赛季CBA联赛之广夏
日期:2016-12-20 17:33:532017金鸡报晓
日期:2017-01-10 15:19:56
7 [报告]
发表于 2015-09-15 16:37 |只看该作者
回复 5# shitou773
  1. [root@test /tmp]$ echo "1234567890" | awk -va='3 5 8' '{split(a,t);for(i in t){$0=gensub(".","&|",t[i]+i-1,$0)}}1'
  2. 123|45|678|90
复制代码

论坛徽章:
0
8 [报告]
发表于 2015-09-15 16:41 |只看该作者
回复 7# haooooaaa

前辈,能否大致简单的解释一下,我刚接触linux没多久,谢谢了啊~~~

   

论坛徽章:
54
2015亚冠之德黑兰石油
日期:2015-07-07 13:00:1615-16赛季CBA联赛之深圳
日期:2016-03-31 09:03:5415-16赛季CBA联赛之辽宁
日期:2016-05-09 20:38:15程序设计版块每日发帖之星
日期:2016-05-12 06:20:0015-16赛季CBA联赛之四川
日期:2016-05-13 15:19:4715-16赛季CBA联赛之福建
日期:2016-05-15 20:24:34每日论坛发贴之星
日期:2016-05-16 06:20:0015-16赛季CBA联赛之吉林
日期:2016-05-26 11:49:4715-16赛季CBA联赛之广东
日期:2016-05-26 13:49:18极客徽章
日期:2016-12-07 14:05:2315-16赛季CBA联赛之广夏
日期:2016-12-20 17:33:532017金鸡报晓
日期:2017-01-10 15:19:56
9 [报告]
发表于 2015-09-15 16:44 |只看该作者
回复 8# shitou773


    真的没什么解释的.  

   把 a , 分割后,  直接按这里的相关位置去替换....

论坛徽章:
0
10 [报告]
发表于 2015-09-15 16:52 |只看该作者
回复 9# haooooaaa

还是自己知道的太少了,现在稍微有点看出来了,我再好好理解一下,谢谢你了啊


   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP