从文件中删除最后3列

时间:2014-01-03 04:55:59

标签: shell unix sed awk

我有一个包含6列的文本文件。如何删除此文件中的最后三列?

c1  c2  c3  c4  c5   c6

期望的输出

c1  c2  c3

6 个答案:

答案 0 :(得分:6)

如果间距不重要,以下是删除最后3个字段的方法。

awk '{NF-=3}1' file
c1 c2 c3

你甚至可以使用

awk 'NF-=3' file

但它没有第一个例子那么强大。

答案 1 :(得分:3)

您可以使用@ paxdiablo的awk来减少NF

的值

或者您可以使用sed

sed 's/\([ \t]\+[^ \t]*\)\{3\}$//' your_file

如果您使用的是Linux,GNU sed会提供-r

sed -r 's/([ \t]+[^ \t]*){3}$//' your_file

答案 2 :(得分:3)

要删除每行中的最后N列,您可以简单地将NF(字段数)减去该数量,同时考虑到没有足够列的特殊情况删除):

pax> echo c1 c2 c3 c4 c5 c6 | awk -vN=3 '{if(NF<N){NF=0}else{NF-=N}print}'
c1 c2 c3

请注意,awk主要是处理数据列的工具。您会注意到我的输出在字段之间有一个空格,因为基于列的处理通常不关心空格的类型。

如果间距很重要(例如,你想保留列之间的空格数),你应该查看另一个工具。

答案 3 :(得分:1)

如果列由单个空格分隔:

cut -d " " -f1-3 file

如果列由多个空格分隔:

tr -s " " file | cut -d " " -f1-3

如果列由制表符分隔:

cut -f1-3 file

答案 4 :(得分:-1)

awk '{print $1 " " $2 " " $3}' filename > filename.new

答案 5 :(得分:-1)

纯粹的重击(如果间距不重要):

tr -s ' ' < file | rev | cut -d' ' -f4- | rev

如果有尾随空格,请使用cut -d' ' -f5-,或者在这些空格之前修剪尾随空格。

但我更喜欢Jotne / paxdiablo的awk NF解决方案。