如何删除列?

时间:2010-03-15 03:02:30

标签: unix shell text

我在下面生成了以下文本文件:

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。我已经尝试使用cut来保留我想要的列并且使用“”作为我的分隔符但是由于文件大小的数字,它使用“space”作为分隔符而混乱。任何建议将不胜感激!哦,只是添加,我想将输出保存为另一个文本文件。非常感谢!

8 个答案:

答案 0 :(得分: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

答案 1 :(得分:3)

轻松完成shell管道。

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

如果您确实需要在C中执行此操作,则可以通过popen在子流程中运行该命令。

如果您有混合空格和制表符分隔符,则需要将其中一个转换为另一个,因为cut不喜欢多个分隔符。使用trcol -x执行此操作。

答案 2 :(得分:3)

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

答案 3 :(得分:2)

你必须在C中这样做吗?这在像perl甚至awk这样的脚本语言中会更容易做到。

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

答案 4 :(得分:0)

我闻到了作业,但我会给你怀疑的好处。

剪切将起作用,但您需要将一个或多个空格合并为一个:

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

要将任何命令的输出保存到文件,它是command > file

答案 5 :(得分:0)

我尝试使用awk'{print $ 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:28uniquelist.txt

所有列都已加入到一个不适合我的列中,因为我将在某个时候使用uniq。谢谢你的帮助!

答案 6 :(得分:0)

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

注意:与the cut version一样,它会将输入中的两个或多个空格替换为单个空格,例如,它可能会破坏输入中的文件名。

答案 7 :(得分:-1)

尝试在excel中以空格作为分隔符打开它们,然后将其删除。看看它是否有效。