我有一个包含6列的文本文件。如何删除此文件中的最后三列?
c1 c2 c3 c4 c5 c6
期望的输出
c1 c2 c3
答案 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解决方案。