免费注册 查看新帖 |

Chinaunix

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

awk怎么输出除$1外的$2...$n的所有元素 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-08-28 11:07 |只看该作者 |倒序浏览
对于下面的代码,怎么采用awk去掉前面的行号?用cut可以解决,想知道用awk怎么处理
   1 #!/bin/bash
   2 # self-destruct.sh
   3
   4 kill $$  # Script kills its own process here.
   5          # Recall that "$$" is the script's PID.
   6
   7 echo "This line will not echo."
   8 # Instead, the shell sends a "Terminated" message to stdout.
   9
  10 exit 0
  11
  12 #  After this script terminates prematurely,
  13 #+ what exit status does it return?
  14 #
  15 # sh self-destruct.sh
  16 # echo $?
  17 # 143
  18 #
  19 # 143 = 128 + 15
  20 #             TERM signal

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
2 [报告]
发表于 2007-08-28 11:14 |只看该作者
sed 's/^ \+[0-9]\+ //'

论坛徽章:
8
摩羯座
日期:2014-11-26 18:59:452015亚冠之浦和红钻
日期:2015-06-23 19:10:532015亚冠之西悉尼流浪者
日期:2015-08-21 08:40:5815-16赛季CBA联赛之山东
日期:2016-01-31 18:25:0515-16赛季CBA联赛之四川
日期:2016-02-16 16:08:30程序设计版块每日发帖之星
日期:2016-06-29 06:20:002017金鸡报晓
日期:2017-01-10 15:19:5615-16赛季CBA联赛之佛山
日期:2017-02-27 20:41:19
3 [报告]
发表于 2007-08-28 11:15 |只看该作者
如果不介意前导空格可以直接 $1=""
如果介意
试试sub()?

论坛徽章:
0
4 [报告]
发表于 2007-08-28 11:51 |只看该作者

回复 #2 寂寞烈火 的帖子

这样好像不想,行号前面有空格的,不能匹配模式^\+[0-9]\+

论坛徽章:
0
5 [报告]
发表于 2007-08-28 12:03 |只看该作者
人家的是
“^ \+[0-9]\+ ”而不是你的
“^\+[0-9]\+”

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
6 [报告]
发表于 2007-08-28 12:26 |只看该作者
版主的方法简单, 或者
awk '{for(i=2;i<=NF;i++)}

论坛徽章:
0
7 [报告]
发表于 2007-08-28 12:59 |只看该作者
明白了,没看清~谢谢各位

论坛徽章:
0
8 [报告]
发表于 2007-08-28 14:51 |只看该作者
自己总结了下,按照上面的办法:
cut -c6- sample
awk '{ $1=""; print}' sample | sed 's/^ \+//' (不知道怎么用sub,只好用sed去掉前面的空格了)
sed 's/^ \+[0-9]\+ *//' sample (烈火大大的模式最后有个空格会有点问题,对于空白行不能去掉前面的行号)
awk ‘{ for(i=2; i<=NF; ++i) printf("%s ", $i); print "" }' sample

学习中,以后请高手们多多指导~~3x

[ 本帖最后由 hansfly 于 2007-8-28 16:16 编辑 ]

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
9 [报告]
发表于 2007-08-28 15:03 |只看该作者
awk的sub
awk '{sub(/.*/,"",$1);sub(/^ /,"");print}'
如果文件行数成百上千行的话, 你的cut就不成啦

论坛徽章:
0
10 [报告]
发表于 2007-08-28 15:23 |只看该作者
awk下,是否可以
awk -F "^[ ]*[0-9]+[ ]+" '{print (NF == 2) ? $2 : $0}'  ur-file
写的晦涩一点,但是更加简洁就是
awk -F "^[ ]*[0-9]+[ ]+" '{print $(1+(NF==2))}'
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP