awk删除"稀疏"中的列文本文件

时间:2015-09-23 09:09:42

标签: awk

我有一个包含4列的文本文件,如此

2010-01-03 10:58:00     268435456       
2010-01-03 10:59:00     268435456       
2010-01-03 11:00:00 -134    0       
2010-01-03 11:01:00 -131    0       
...

在第3列中,您可以找到我想要保留的值,在第4列中,您可以找到错误代码。

但是,两列中的每一行都没有值。因此,awk '!($4="")' file仅在第3列存在时删除第4列。否则,错误代码将写入第3列,从而与我的观察值混淆。

我怎样才能真正丢弃第4列?

2 个答案:

答案 0 :(得分:2)

"字段通常由空格序列(空格,TAB和换行符)分隔,而不是由单个空格分隔。连续两个空格不分隔空字段。字段分隔符FS的默认值是包含单个空格的字符串," &#34 ;.如果awk以通常的方式解释该值,则每个空格字符将分隔字段,因此一行中的两个空格将在它们之间形成空字段。不会发生这种情况的原因是作为FS值的单个空格是一种特殊情况 - 它用于指定分隔字段的默认方式。"来自" GAWK:有效的AWK编程"

解决方案,在您的情况下,字段由制表符或空格分隔

awk -F "[\t ]" '{$4=""}1' file

awk -F "[[:blank:]]" '{$4=""}1' file

你明白了,

2010-01-03 10:58:00  
2010-01-03 10:59:00  
2010-01-03 11:00:00 -134 
2010-01-03 11:01:00 -131 

答案 1 :(得分:1)

跳过最后一栏。

awk '{$NF=""}1' file

输出

2010-01-03 10:58:00 
2010-01-03 10:59:00 
2010-01-03 11:00:00 -134 
2010-01-03 11:01:00 -131