免费注册 查看新帖 |

Chinaunix

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

awk双导管分割问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-09-16 15:59 |只看该作者 |倒序浏览
大牛们,我有个awk分割的问题

系统版本如下
$ uname -a
SunOS shreuter1 5.8 Generic_117350-62 sun4u sparc SUNW,Sun-Blade-100

我有一组数据,形如

aaa||bbb||ccc||ddd

使用两个管道号分割,于是我用如下语句想取出aaa,bbb,ccc,ddd
$N 其中的N应该等于1~4即可
echo "aaa||bbb||ccc||ddd" |awk 'BEGIN {FS="||"} {print $N}'

但是实际的情况如下,1,3,5,7才是我取出的数据,2,4,6为空


  1. $ echo "aaa||bbb||ccc||ddd" |awk 'BEGIN {FS="||"} {print $1}'
  2. aaa
  3. $ echo "aaa||bbb||ccc||ddd" |awk 'BEGIN {FS="||"} {print $2}'

  4. $ echo "aaa||bbb||ccc||ddd" |awk 'BEGIN {FS="||"} {print $3}'
  5. bbb
  6. $ echo "aaa||bbb||ccc||ddd" |awk 'BEGIN {FS="||"} {print $4}'

  7. $ echo "aaa||bbb||ccc||ddd" |awk 'BEGIN {FS="||"} {print $5}'
  8. ccc
  9. $ echo "aaa||bbb||ccc||ddd" |awk 'BEGIN {FS="||"} {print $6}'

  10. $ echo "aaa||bbb||ccc||ddd" |awk 'BEGIN {FS="||"} {print $7}'
  11. ddd
复制代码


如果把双导管号改成单个导管,没有上述问题


  1. $ echo "aaa|bbb|ccc|ddd" |awk 'BEGIN {FS="|"} {print $1}'
  2. aaa
  3. $ echo "aaa|bbb|ccc|ddd" |awk 'BEGIN {FS="|"} {print $2}'
  4. bbb
  5. $ echo "aaa|bbb|ccc|ddd" |awk 'BEGIN {FS="|"} {print $3}'
  6. ccc
  7. $ echo "aaa|bbb|ccc|ddd" |awk 'BEGIN {FS="|"} {print $4}'
  8. ddd
复制代码


不知道为何  双导管分割有问题

如何使其正常显示,因为这样的格式我在实际使用中经常遇到,经常需要分割

谢谢大牛们了

论坛徽章:
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
2 [报告]
发表于 2009-09-16 16:03 |只看该作者

回复 #1 CU_Solaris 的帖子

$ echo "aaa||bbb||ccc||ddd" |awk 'BEGIN {FS="\\|\\|"} {print $2}'
bbb
$ echo "aaa||bbb||ccc||ddd" |awk 'BEGIN {FS="[|][|]"} {print $2}'
bbb

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
3 [报告]
发表于 2009-09-16 16:03 |只看该作者
FS="[|][|]"

论坛徽章:
0
4 [报告]
发表于 2009-09-16 16:08 |只看该作者
FS="[|]+"

论坛徽章:
0
5 [报告]
发表于 2009-09-16 16:08 |只看该作者
ly5066113 大哥,您用的是什么版本的什么操作系统?

论坛徽章:
0
6 [报告]
发表于 2009-09-16 16:09 |只看该作者
$ echo "aaa||bbb||ccc||ddd" |awk 'BEGIN {FS="\\|\\|"} {print $1}'
aaa||bbb||ccc||ddd
$ echo "aaa||bbb||ccc||ddd" |awk 'BEGIN {FS="[|][|]"} {print $1}'
aaa||bbb||ccc||ddd


我这边全都出来了,没分割

论坛徽章:
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
7 [报告]
发表于 2009-09-16 16:11 |只看该作者

回复 #5 CU_Solaris 的帖子

Linux

如果你是Solaris,那么用nawk代替awk试试。

论坛徽章:
0
8 [报告]
发表于 2009-09-16 16:13 |只看该作者
原帖由 ly5066113 于 2009-9-16 16:11 发表
Linux

如果你是Solaris,那么用nawk代替awk试试。

解决了

$ echo "aaa||bbb||ccc||ddd" |nawk 'BEGIN {FS="\\|\\|"} {print $1}'
aaa
$ echo "aaa||bbb||ccc||ddd" |nawk 'BEGIN {FS="\\|\\|"} {print $2}'
bbb


解决了
为何Solaris的awk不支持?

论坛徽章:
0
9 [报告]
发表于 2009-09-16 16:17 |只看该作者
找到区别了,我再去研究研究,嘿嘿



  1. 在 20 世纪 80 年代中期,对 AWK 语言进行了更新,并不同程度地使用一种称为 NAWK (New AWK) 的增强版本对其进行了替换。许多系统中仍然存在着旧的 AWK 解释器,但通常将其安装为 oawk (Old AWK) 命令,而 NAWK 解释器则安装为主要的 awk 命令,也可以使用 nawk 命令。Dr. Kernighan 仍然在对 NAWK 进行维护,与 GAWK 一样,它也是开放源代码的,并且可以免费获得。
  2. GAWK 是 GNU Project 的 AWK 解释器的开放源代码实现。尽管早期的 GAWK 发行版是旧的 AWK 的替代程序,但不断地对其进行了更新,以包含 NAWK 的特性。
复制代码

论坛徽章:
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
10 [报告]
发表于 2009-09-16 16:18 |只看该作者

回复 #8 CU_Solaris 的帖子

这个你要去问Sun了,为什么在Solaris上装了这种版本的awk。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP