如何在ubuntu中删除一个文本文件中的某一列?

sh/bash/dash/ksh/zsh等Shell脚本
yimaizhe
帖子: 48
注册时间: 2011-05-05 16:38

如何在ubuntu中删除一个文本文件中的某一列?

#1

帖子 yimaizhe » 2011-09-19 12:43

如题,有一个比较大的文本文件,大概有1G
我想删除其中的某一列,不是行,行可以用sed删除
怎么操作呢?谢谢!

比如一个叫example的文件,有一万行和一万列,我想删除第8列,该怎么办呢?
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

Re: 如何在ubuntu中删除一个文本文件中的某一列?

#2

帖子 eexpress » 2011-09-19 15:05

sed -i '8d'
..
awk 处理列。
cut -f -d 也可以。
自己先实验
● 鸣学
头像
我就是我2
帖子: 1215
注册时间: 2008-12-13 10:55
来自: the Earth
联系:

Re: 如何在ubuntu中删除一个文本文件中的某一列?

#3

帖子 我就是我2 » 2011-09-19 15:19

代码: 全选

awk '{$8="";print $0}' foobar
希望能行。
删除=>不打印
删除=>为空
苏东坡问佛印道:“人人皆念观世音菩萨,观世音菩萨念谁?”
佛印答道:“念观世音菩萨。”
苏东坡诧异:“为何亦念观世音菩萨?”
曰:“求人不如求己。”


dropbox 誰好奇,誰來點
勞碌一生又如何,虛度一生又如何,你過得開心嗎?人活著就要開心嘛!
头像
lilydjwg
论坛版主
帖子: 4258
注册时间: 2009-04-11 23:46
系统: Arch Linux
联系:

Re: 如何在ubuntu中删除一个文本文件中的某一列?

#4

帖子 lilydjwg » 2011-09-19 15:39

我就是我2 写了:

代码: 全选

awk '{$8="";print $0}' foobar
希望能行。
删除=>不打印
删除=>为空
这样会多一个 FS
头像
lilydjwg
论坛版主
帖子: 4258
注册时间: 2009-04-11 23:46
系统: Arch Linux
联系:

Re: 如何在ubuntu中删除一个文本文件中的某一列?

#5

帖子 lilydjwg » 2011-09-19 15:40

代码: 全选

cut -f '1-7,9-'
头像
我就是我2
帖子: 1215
注册时间: 2008-12-13 10:55
来自: the Earth
联系:

Re: 如何在ubuntu中删除一个文本文件中的某一列?

#6

帖子 我就是我2 » 2011-09-19 15:53

lilydjwg 写了:
我就是我2 写了:

代码: 全选

awk '{$8="";print $0}' foobar
希望能行。
删除=>不打印
删除=>为空
这样会多一个 FS
再sed处理一下。如果是空格,

代码: 全选

sed 's/  / /g'
别的自行决定。
上次由 我就是我2 在 2011-09-19 15:56,总共编辑 1 次。
苏东坡问佛印道:“人人皆念观世音菩萨,观世音菩萨念谁?”
佛印答道:“念观世音菩萨。”
苏东坡诧异:“为何亦念观世音菩萨?”
曰:“求人不如求己。”


dropbox 誰好奇,誰來點
勞碌一生又如何,虛度一生又如何,你過得開心嗎?人活著就要開心嘛!
fnan
帖子: 919
注册时间: 2009-07-01 22:04

Re: 如何在ubuntu中删除一个文本文件中的某一列?

#7

帖子 fnan » 2011-09-19 15:56

为何说sed不能处理列?一万行跟一行是一样的:
echo 1a 2b 3d 4c 5e 6f 7g 8h 9i 0j|sed -r 's/\b\S+\s//8'
1a 2b 3d 4c 5e 6f 7g 9i 0j
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。
yimaizhe
帖子: 48
注册时间: 2011-05-05 16:38

Re: 如何在ubuntu中删除一个文本文件中的某一列?

#8

帖子 yimaizhe » 2011-09-19 16:34

lilydjwg 写了:
我就是我2 写了:

代码: 全选

awk '{$8="";print $0}' foobar
希望能行。
删除=>不打印
删除=>为空
这样会多一个 FS
用cut 怎么才能得到一个删除了第8行的文件呢,执行你说的那个命令就是只会在屏幕上显示,谢谢!
头像
lilydjwg
论坛版主
帖子: 4258
注册时间: 2009-04-11 23:46
系统: Arch Linux
联系:

Re: 如何在ubuntu中删除一个文本文件中的某一列?

#9

帖子 lilydjwg » 2011-09-19 16:41

yimaizhe 写了:
lilydjwg 写了:
我就是我2 写了:

代码: 全选

awk '{$8="";print $0}' foobar
希望能行。
删除=>不打印
删除=>为空
这样会多一个 FS
用cut 怎么才能得到一个删除了第8行的文件呢,执行你说的那个命令就是只会在屏幕上显示,谢谢!
重定向啊啊啊啊。你赶紧去恶补 shell 的基本操作吧。。。。。
头像
我就是我2
帖子: 1215
注册时间: 2008-12-13 10:55
来自: the Earth
联系:

Re: 如何在ubuntu中删除一个文本文件中的某一列?

#10

帖子 我就是我2 » 2011-09-19 16:42

yimaizhe 写了:
lilydjwg 写了:
我就是我2 写了:

代码: 全选

awk '{$8="";print $0}' foobar
希望能行。
删除=>不打印
删除=>为空
这样会多一个 FS
用cut 怎么才能得到一个删除了第8行的文件呢,执行你说的那个命令就是只会在屏幕上显示,谢谢!
标准输出重定向到文件。
cut.... >foobar.txt
苏东坡问佛印道:“人人皆念观世音菩萨,观世音菩萨念谁?”
佛印答道:“念观世音菩萨。”
苏东坡诧异:“为何亦念观世音菩萨?”
曰:“求人不如求己。”


dropbox 誰好奇,誰來點
勞碌一生又如何,虛度一生又如何,你過得開心嗎?人活著就要開心嘛!
yimaizhe
帖子: 48
注册时间: 2011-05-05 16:38

Re: 如何在ubuntu中删除一个文本文件中的某一列?

#11

帖子 yimaizhe » 2011-09-19 16:58

我就是我2 写了:
yimaizhe 写了:
lilydjwg 写了:
我就是我2 写了:

代码: 全选

awk '{$8="";print $0}' foobar
希望能行。
删除=>不打印
删除=>为空
这样会多一个 FS
用cut 怎么才能得到一个删除了第8行的文件呢,执行你说的那个命令就是只会在屏幕上显示,谢谢!
标准输出重定向到文件。
cut.... >foobar.txt
thanks a lot , it works well following your code,
hehe, i am a newbie on shell
sk1418
帖子: 229
注册时间: 2007-07-01 17:36
系统: (En):System
来自: (En):address
联系:

Re: 如何在ubuntu中删除一个文本文件中的某一列?

#12

帖子 sk1418 » 2011-09-19 18:20

你们的方法都太短,太简单,太快速,太高效,不适合初学者。

我来个基础的,按部就班的,淫荡的:

例子数据,删除第8列:

代码: 全选

kent$  seq 11 50 |xargs -n10
11 12 13 14 15 16 17 18 19 20
21 22 23 24 25 26 27 28 29 30
31 32 33 34 35 36 37 38 39 40
41 42 43 44 45 46 47 48 49 50

kent$  seq 11 50|xargs -n 10 |awk '{for (i=1;i<=NF;i++) a[i,NR]=$i; }END{
    for(i=1;i<=NF;i++) {
        for(j=1;j<=NR;j++)
            printf a[i,j]" ";
        print ""
    } 
}' |awk 'NR!=8'|awk '{for (i=1;i<=NF;i++) a[i,NR]=$i; }END{
    for(i=1;i<=NF;i++) {
        for(j=1;j<=NR;j++)
            printf a[i,j]" ";
        print ""
    } 
}'

输出:
11 12 13 14 15 16 17 19 20 
21 22 23 24 25 26 27 29 30 
31 32 33 34 35 36 37 39 40 
41 42 43 44 45 46 47 49 50 
还有一个更淫荡更基础的方法,我就不说了,大家都知道。
---
regards,

Kent
头像
我就是我2
帖子: 1215
注册时间: 2008-12-13 10:55
来自: the Earth
联系:

Re: 如何在ubuntu中删除一个文本文件中的某一列?

#13

帖子 我就是我2 » 2011-09-19 20:49

:em20 LS你行。哎。。。我不懂那些基础的方法。数组还没探索呢。
苏东坡问佛印道:“人人皆念观世音菩萨,观世音菩萨念谁?”
佛印答道:“念观世音菩萨。”
苏东坡诧异:“为何亦念观世音菩萨?”
曰:“求人不如求己。”


dropbox 誰好奇,誰來點
勞碌一生又如何,虛度一生又如何,你過得開心嗎?人活著就要開心嘛!
sk1418
帖子: 229
注册时间: 2007-07-01 17:36
系统: (En):System
来自: (En):address
联系:

Re: 如何在ubuntu中删除一个文本文件中的某一列?

#14

帖子 sk1418 » 2011-09-19 23:59

我的那个其实是个用awk转置矩阵的方法,虽然用在这个例子上显得有点可笑了,但是有些特殊情况还是挺有用的。我写那个也就是开个玩笑。

其实要实现lz的功能,简单的办法就是用vim打开,然后

代码: 全选

7f<空格>
然后
ctrl-v
nj (n是行数)
nl (n是看你这列有多少字符就是多少)
x
发现要是描述vim里的一个操作,还是真费劲。 1,2秒就操作完成的描述能描述一大段。。。

如果要用高级的功能是,用高级的文本编辑器(如excel)打开文件,然后用几个高级的方法,最后输出你要的结果。

最后求教一下,vim里,ctrl-v 状态下,要选择光标所在列的一整列,怎么弄? jG不行。
---
regards,

Kent
头像
我就是我2
帖子: 1215
注册时间: 2008-12-13 10:55
来自: the Earth
联系:

Re: 如何在ubuntu中删除一个文本文件中的某一列?

#15

帖子 我就是我2 » 2011-09-20 0:04

LS,别人的文档可是有1G大的。。。 :em20
苏东坡问佛印道:“人人皆念观世音菩萨,观世音菩萨念谁?”
佛印答道:“念观世音菩萨。”
苏东坡诧异:“为何亦念观世音菩萨?”
曰:“求人不如求己。”


dropbox 誰好奇,誰來點
勞碌一生又如何,虛度一生又如何,你過得開心嗎?人活著就要開心嘛!
回复