免费注册 查看新帖 |

Chinaunix

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

[文本处理] awk 分隔 [复制链接]

论坛徽章:
6
摩羯座
日期:2013-12-27 09:45:04技术图书徽章
日期:2014-01-27 12:40:06辰龙
日期:2014-02-28 15:12:52巳蛇
日期:2014-03-21 17:06:27未羊
日期:2014-04-15 20:12:41黑曼巴
日期:2016-08-02 11:00:06
发表于 2014-08-26 15:27 |显示全部楼层
输入:abcdef  使用awk如何分割为$1=a $2=b $3=c .......... 输出:a|b|c|d|e|f

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:58:11
发表于 2014-08-26 15:28 |显示全部楼层
  1. [root@localhost ~]# echo abcdef  | awk -vOFS="|" -F ""  '{NF+=0;print $0}'
  2. a|b|c|d|e|f
  3. [root@localhost ~]#
复制代码

论坛徽章:
24
申猴
日期:2014-10-10 15:56:39射手座
日期:2014-10-10 15:57:18黑曼巴
日期:2018-05-14 11:05:122016科比退役纪念章
日期:2018-05-14 11:05:0715-16赛季CBA联赛之北控
日期:2018-05-14 11:05:0015-16赛季CBA联赛之江苏
日期:2017-02-27 18:11:0715-16赛季CBA联赛之上海
日期:2018-08-15 09:48:5415-16赛季CBA联赛之佛山
日期:2018-07-20 17:14:2315-16赛季CBA联赛之佛山
日期:2019-09-10 18:08:4615-16赛季CBA联赛之山西
日期:2020-03-26 09:40:5115-16赛季CBA联赛之佛山
日期:2020-05-08 09:03:54
发表于 2014-08-26 15:44 |显示全部楼层
回复 2# 这个冬天不冷

请教下NF+=0;pirnt $0 就可以打印出字段分隔符是什么原理?
   

论坛徽章:
0
发表于 2014-08-26 15:51 |显示全部楼层
菜鸟一枚
echo "abcdef" |awk 'BEGIN{FS=""}{for(i=1;i<=NF;i++) {printf A$i;A="|"}}'

论坛徽章:
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
发表于 2014-08-26 16:10 |显示全部楼层
回复 3# chengchow


改变 $0 ,使 OFS 的设置生效,常用的还有 $1=$1
  1. echo abcdef | awk -F "" -v OFS="|" '$1=$1'
复制代码

论坛徽章:
7
天秤座
日期:2014-08-07 13:56:30丑牛
日期:2014-08-27 20:34:21双鱼座
日期:2014-08-27 22:02:21天秤座
日期:2014-08-30 10:39:11双鱼座
日期:2014-09-21 20:07:532015年亚洲杯之日本
日期:2015-02-06 14:00:282015亚冠之大阪钢巴
日期:2015-11-02 14:50:19
发表于 2014-08-26 16:13 |显示全部楼层
本帖最后由 MeRcy_PM 于 2014-08-26 16:15 编辑

OFS列输出分隔符
NF+=0这句是为嘛的。

论坛徽章:
3
酉鸡
日期:2014-04-23 17:17:56丑牛
日期:2014-05-08 11:41:302015亚冠之德黑兰石油
日期:2015-08-03 11:14:27
发表于 2014-08-26 16:49 |显示全部楼层
mark下
用sed可以不?
echo abcdef  | sed 's/./|&/2g'
a|b|c|d|e|f

论坛徽章:
14
15-16赛季CBA联赛之辽宁
日期:2019-06-16 15:47:3515-16赛季CBA联赛之广夏
日期:2016-08-13 21:24:352015亚冠之武里南联
日期:2015-07-07 17:37:372015亚冠之萨济拖拉机
日期:2015-07-06 17:07:482015亚冠之全北现代
日期:2015-06-04 13:54:272015亚冠之城南
日期:2015-05-21 15:43:212015年亚洲杯之伊朗
日期:2015-04-25 18:20:362015年亚洲杯之伊朗
日期:2015-04-20 16:06:052015年亚洲杯之科威特
日期:2015-03-07 12:51:26丑牛
日期:2014-12-30 10:26:38申猴
日期:2014-09-28 22:40:18金牛座
日期:2014-09-13 21:12:22
发表于 2014-08-26 16:51 |显示全部楼层
  1. <?php

  2. $str1="abcdef";
  3. $arr = str_split($str1);
  4. $newstr=implode('|', $arr);
  5. echo $newstr;

  6. ?>

  7. 结果:
  8. a|b|c|d|e|f[Finished in 0.2s]
复制代码

论坛徽章:
24
申猴
日期:2014-10-10 15:56:39射手座
日期:2014-10-10 15:57:18黑曼巴
日期:2018-05-14 11:05:122016科比退役纪念章
日期:2018-05-14 11:05:0715-16赛季CBA联赛之北控
日期:2018-05-14 11:05:0015-16赛季CBA联赛之江苏
日期:2017-02-27 18:11:0715-16赛季CBA联赛之上海
日期:2018-08-15 09:48:5415-16赛季CBA联赛之佛山
日期:2018-07-20 17:14:2315-16赛季CBA联赛之佛山
日期:2019-09-10 18:08:4615-16赛季CBA联赛之山西
日期:2020-03-26 09:40:5115-16赛季CBA联赛之佛山
日期:2020-05-08 09:03:54
发表于 2014-08-26 17:30 |显示全部楼层
回复 5# ly5066113
非常感谢,有些明白了
echo "a b c d" | awk 'BEGIN{OFS="|"}NF=NF'
a|b|c|d
好像增加了判断,就逐列打印,否则就打印一个完整体$0

   

论坛徽章:
0
发表于 2014-08-26 17:52 |显示全部楼层
  1. >>> s='abcdefg'
  2. >>> s.replace('','|').strip('|')
  3. 'a|b|c|d|e|f|g'
复制代码
  做练习~
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP