2010-03-15 48 views
3

我已经产生了下面的下面的文本文件:如何删除列?

fe120b99164f151b28bf86afa6389b22 -rw-r--r-- 1 joey joey 186 2010-03-14 19:26 Descript.txt 
41705ea936cfc653f273b5454c1cdde6 -rw-r--r-- 1 joey joey 30 2010-03-14 20:29 listof.txt 
0e25cca3222d32fff43563465af03340 -rw-r--r-- 1 joey joey 28 2010-03-14 23:35 sedexample.txt 
d41d8cd98f00b204e9800998ecf8427e -rw-r--r-- 1 joey joey 0 2010-02-16 15:11 test1.txt 
d41d8cd98f00b204e9800998ecf8427e -rw-r--r-- 1 joey joey 0 2010-02-16 15:11 test2.txt 
d41d8cd98f00b204e9800998ecf8427e -rw-r--r-- 1 joey joey 0 2010-02-16 15:11 test3.txt 
d41d8cd98f00b204e9800998ecf8427e -rw-r--r-- 1 joey joey 0 2010-02-16 15:11 test4.txt 
d41d8cd98f00b204e9800998ecf8427e -rw-r--r-- 1 joey joey 0 2010-02-16 15:11 test5.txt 
d41d8cd98f00b204e9800998ecf8427e -rw-r--r-- 1 joey joey 0 2010-02-16 15:11 test6.txt 
f5c7f1856249d0526be10df5bd5b895a -rw-r--r-- 1 joey joey 26 2010-03-13 14:13 testingfile.txt 
d41d8cd98f00b204e9800998ecf8427e -rw-r--r-- 1 joey joey 0 2010-03-15 00:28 uniquelist.txt 

基本上我想摆脱接入,金额栏,用户和组列。换句话说,我想摆脱3,4,5列。我曾尝试使用剪切来保留我想要的列,然后以“”作为我的分隔符,但是由于文件大小的数字,它使用“空格”作为分隔符来混淆。任何意见将不胜感激!哦,只需添加,我想将输出保存为另一个文本文件。非常感谢!

回答

4

你的cut命令是怎么样的?

$ cut -d" " -f1,6- file 
fe120b99164f151b28bf86afa6389b22 186 2010-03-14 19:26 Descript.txt 
41705ea936cfc653f273b5454c1cdde6 30 2010-03-14 20:29 listof.txt 
0e25cca3222d32fff43563465af03340 28 2010-03-14 23:35 sedexample.txt 
d41d8cd98f00b204e9800998ecf8427e 0 2010-02-16 15:11 test1.txt 
d41d8cd98f00b204e9800998ecf8427e 0 2010-02-16 15:11 test2.txt 
d41d8cd98f00b204e9800998ecf8427e 0 2010-02-16 15:11 test3.txt 
d41d8cd98f00b204e9800998ecf8427e 0 2010-02-16 15:11 test4.txt 
d41d8cd98f00b204e9800998ecf8427e 0 2010-02-16 15:11 test5.txt 
d41d8cd98f00b204e9800998ecf8427e 0 2010-02-16 15:11 test6.txt 
f5c7f1856249d0526be10df5bd5b895a 26 2010-03-13 14:13 testingfile.txt 
d41d8cd98f00b204e9800998ecf8427e 0 2010-03-15 00:28 uniquelist.txt 

根据需要重定向到新文件。

awk或

$ awk '{$2=$3=$4=$5="";gsub(/ +/," ")}1' file 
fe120b99164f151b28bf86afa6389b22 186 2010-03-14 19:26 Descript.txt 
41705ea936cfc653f273b5454c1cdde6 30 2010-03-14 20:29 listof.txt 
0e25cca3222d32fff43563465af03340 28 2010-03-14 23:35 sedexample.txt 
d41d8cd98f00b204e9800998ecf8427e 0 2010-02-16 15:11 test1.txt 
d41d8cd98f00b204e9800998ecf8427e 0 2010-02-16 15:11 test2.txt 
d41d8cd98f00b204e9800998ecf8427e 0 2010-02-16 15:11 test3.txt 
d41d8cd98f00b204e9800998ecf8427e 0 2010-02-16 15:11 test4.txt 
d41d8cd98f00b204e9800998ecf8427e 0 2010-02-16 15:11 test5.txt 
d41d8cd98f00b204e9800998ecf8427e 0 2010-02-16 15:11 test6.txt 
f5c7f1856249d0526be10df5bd5b895a 26 2010-03-13 14:13 testingfile.txt 
d41d8cd98f00b204e9800998ecf8427e 0 2010-03-15 00:28 uniquelist.txt 
+0

我的原始剪切命令是这样的: more indexfile.txt | cut -d“”-f 1,6,7,8,9> goodindex.txt –

+0

非常感谢您的帮助!你的解决方案很完美! –

+0

@Joey jie:如果您不清楚为什么您的初始* cut *有时会删除时间和/或文件名:大小(?)列中的额外填充空格会在* cut *内部创建额外的空字段。这导致您的字段枚举在某些情况下太短。如果你使用了'-f1,6,7,8,9,10,11',它就可以工作,但显然'-f1,6-'更简洁灵活。如果要删除第一个填充空格的列之外的字段,则需要使用其他解决方案。如果所有列(包括要删除的列之前的列)具有固定的宽度,也许'cut -c'。 –

2

你必须在C中做到这一点吗?这在Perl等脚本语言中更容易实现,甚至awk。

awk '{print $1 $6 $7 $8 $9}' file.txt 
-1

试着用excel作为分隔符打开它们,在那里删除它。看看它是否有效。

3

很容易做为壳管。

cut --delimiter=' ' --fields=3-5 --complement 

如果你真的需要做到这一点在C,你可以通过popen运行在一个子该命令。

如果您有混合的空格和制表符分隔符,则需要将其中一个转换为另一个,因为cut不喜欢多个分隔符。用trcol -x做到这一点。

3

管通过awk '{print $1 $6 $7 $8 $9;}'

+0

这个答案压缩了所有的空格,它只是一个很长的“单词” –

0

我闻到功课,但我会给你怀疑的好处。

剪切会的工作,但你需要一个或多个空格合并成只有一个第一:

sed "s/ \+/ /g" input_file | cut -d' ' -f-2,6- 

对任何命令的输出保存到一个文件,它的command > file

0

我用awk尝试 '{打印$ 1 $ $ 6 $ 7 $ 8 9}' file.txt的但是它给了我下面的输出:

fe120b99164f151b28bf86afa6389b221862010-03-1419:26Descriptions。 TXT 41705ea936cfc653f273b5454c1cdde6302010-03-1420:29listofnumbers.txt 0e25cca3222d32fff43563465af03340282010-03-1423:35sedexample.txt d41d8cd98f00b204e9800998ecf8427e02010-02-1615:11test1.txt d41d8cd98f00b204e9800998ecf8427e02010-02-1615:11test2.txt d41d8cd98f00b204e9800998ecf8427e02010-02-1615:11test3.txt d41d8cd98f00b204e9800998ecf8427e02010-02-1615:11test4.txt d41d8cd98f00b204e9800998ecf8427e02010-02-1615:11test5.txt d41d8cd98f00b204e9800998ecf8427e02010-02-1615:11test6.txt f5c7f1856249d0526be10df5bd5b895a262010-03-1314:13testingfile.txt d41d8cd98f00b204e9800998ecf8427e02010-03-1500:28分类列表。txt

所有的列已经加入到一个对我来说不理想的列中,因为我会在某个时候使用uniq。谢谢你的帮助!

0
$ perl -lane'$, = " "; print @F[0,5..$#F]' input.txt 

注意:除了the cut version它由一个单一的空间代替在输入两个或更多个空间例如,它可以打破了输入文件名。