我有一个包含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列?
答案 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