Chinaunix

标题: 如何替换指定列的值? [打印本页]

作者: ksding    时间: 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的替换那样的(因为文件列数很多,上面那种写法看着会很傻




作者: lkk_super    时间: 2012-06-05 10:31
  1. awk 'BEGIN{OFS=FS="|"}{$5="";}1' file
复制代码

作者: rdcwayx    时间: 2012-06-05 10:31
  1. awk '{$5=""}1' FS=\| OFS=\| infile
复制代码

作者: earwig    时间: 2012-06-05 10:34
rdcwayx 发表于 2012-06-05 10:31


请教一下,为什么在后面加一个数字1呢?它的作用是什么呢?
作者: rdcwayx    时间: 2012-06-05 10:35
earwig 发表于 2012-06-05 10:34
请教一下,为什么在后面加一个数字1呢?它的作用是什么呢?

http://bbs.chinaunix.net/thread-2309494-1-1.html
作者: 英语盲学linux    时间: 2012-06-05 10:38
  1. sed 's/[^|]*|/|/5'
复制代码

作者: earwig    时间: 2012-06-05 10:39
rdcwayx 发表于 2012-06-05 10:35
http://bbs.chinaunix.net/thread-2309494-1-1.html

正在看,谢谢!!
作者: jils2013    时间: 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. $
复制代码

作者: BangBull    时间: 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|'
复制代码

作者: ksding    时间: 2012-07-28 16:41
非常感谢各位(:





欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2