免费注册 查看新帖 |

Chinaunix

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

如何替换指定列的值? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-06-05 10:23 |只看该作者 |倒序浏览
本帖最后由 ksding 于 2012-06-05 10:24 编辑

竖线分割文本文件如:
123|sfaf|2|sfs23223|ABC|sdfsAA|
123|sfaf|7|121344411244411|U83Fa|sdfs|

如何将第五列替换成空或指定值,如上面文件替换成空后为:
123|sfaf|2|sfs23223||sdfsAA|
123|sfaf|7|121344411244411||sdfs|


现在用的是个笨方法:
cat filename|while read line
do
echo "$line"|awk -F\| -v v=\|  '{print $1v$2v$3v$4v""v$6v}'
done


有没有一条命令就可以弄好的,类似sed的替换那样的(因为文件列数很多,上面那种写法看着会很傻



论坛徽章:
5
亥猪
日期:2013-10-15 13:41:04CU十二周年纪念徽章
日期:2013-10-24 15:41:34申猴
日期:2013-10-28 10:55:45辰龙
日期:2013-10-31 13:29:29丑牛
日期:2014-02-14 11:25:54
2 [报告]
发表于 2012-06-05 10:31 |只看该作者
  1. awk 'BEGIN{OFS=FS="|"}{$5="";}1' file
复制代码

论坛徽章:
15
2015年辞旧岁徽章
日期:2015-03-03 16:54:15双鱼座
日期:2015-01-15 17:29:44午马
日期:2015-01-06 17:06:51子鼠
日期:2014-11-24 10:11:13寅虎
日期:2014-08-18 07:10:55酉鸡
日期:2014-04-02 12:24:51双子座
日期:2014-04-02 12:19:44天秤座
日期:2014-03-17 11:43:36亥猪
日期:2014-03-13 08:13:51未羊
日期:2014-03-11 12:42:03白羊座
日期:2013-11-20 10:15:18CU大牛徽章
日期:2013-04-17 11:48:45
3 [报告]
发表于 2012-06-05 10:31 |只看该作者
  1. awk '{$5=""}1' FS=\| OFS=\| infile
复制代码

论坛徽章:
0
4 [报告]
发表于 2012-06-05 10:34 |只看该作者
rdcwayx 发表于 2012-06-05 10:31


请教一下,为什么在后面加一个数字1呢?它的作用是什么呢?

论坛徽章:
15
2015年辞旧岁徽章
日期:2015-03-03 16:54:15双鱼座
日期:2015-01-15 17:29:44午马
日期:2015-01-06 17:06:51子鼠
日期:2014-11-24 10:11:13寅虎
日期:2014-08-18 07:10:55酉鸡
日期:2014-04-02 12:24:51双子座
日期:2014-04-02 12:19:44天秤座
日期:2014-03-17 11:43:36亥猪
日期:2014-03-13 08:13:51未羊
日期:2014-03-11 12:42:03白羊座
日期:2013-11-20 10:15:18CU大牛徽章
日期:2013-04-17 11:48:45
5 [报告]
发表于 2012-06-05 10:35 |只看该作者
earwig 发表于 2012-06-05 10:34
请教一下,为什么在后面加一个数字1呢?它的作用是什么呢?

http://bbs.chinaunix.net/thread-2309494-1-1.html

论坛徽章:
0
6 [报告]
发表于 2012-06-05 10:38 |只看该作者
  1. sed 's/[^|]*|/|/5'
复制代码

论坛徽章:
0
7 [报告]
发表于 2012-06-05 10:39 |只看该作者
rdcwayx 发表于 2012-06-05 10:35
http://bbs.chinaunix.net/thread-2309494-1-1.html

正在看,谢谢!!

论坛徽章:
0
8 [报告]
发表于 2012-06-05 10:48 |只看该作者
为什么要用read,awk也是一行一行读的啊?
  1. [root@localhost shell]# awk 'BEGIN{FS="|";OFS="|"}NF!=0{$5=""}1'  1234
  2. 123|sfaf|7|121344411244411||sdfs|
  3. 123|sfaf|2|sfs23223||sdfsAA|
  4. 123|sfaf|7|121344411244411||sdfs|


  5. [root@localhost shell]# cat -vte 1234
  6. 123|sfaf|7|121344411244411|U83Fa|sdfs|$
  7. 123|sfaf|2|sfs23223|ABC|sdfsAA|$
  8. 123|sfaf|7|121344411244411|U83Fa|sdfs|$
  9. $
  10. $
复制代码

论坛徽章:
0
9 [报告]
发表于 2012-06-05 14:40 |只看该作者
python 版本:
  1. >>> a = '123|sfaf|7|121344411244411|U83Fa|sdfs|'
  2. >>> aList = a.split('|')
  3. >>> aList
  4. ['123', 'sfaf', '7', '121344411244411', 'U83Fa', 'sdfs', '']
  5. >>> aList[4]=''
  6. >>> aList
  7. ['123', 'sfaf', '7', '121344411244411', '', 'sdfs', '']
  8. >>> '|'.join(aList)
  9. '123|sfaf|7|121344411244411||sdfs|'
复制代码

论坛徽章:
0
10 [报告]
发表于 2012-07-28 16:41 |只看该作者
非常感谢各位(:
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP