删除文件的最后一列

假设我们需要处理一个文本文件

1223 1234 1323 ... 2222 123
1233 1234 1233 ... 3444 125
0000 5553 3455 ... 2334 222

将最后一列去除

使用ask的NF

可以使用以下3种awk方法:

awk 'NF{NF-=1};1' <in >out
awk 'NF{NF--};1' <in >out
awk 'NF{--NF};1' <in >out

解释:

  • NF 表示一行中字段数的变量。 在 AWK 中,如果它们不是 0 或空字符串“”,则为真。

  • NF-=1 NF----NF 只是从 NF 变量中减去 1,这样可以防止最后一个字段被打印出来。awk 重新构造 $0,默认情况下连接所有由空格分隔的字段。 $0 不再包含最后一个字段。

  • 最后一部分是1,用作表示真实的表达式。 如果 awk 表达式在没有任何关联操作的情况下求值为真,则 awk 的默认操作是打印 $0。

更好的思路:将指定列=""

另一种思路是把指定列填写为 "" ,也就是清除,例如

awk '{$6=$8=""; print $0}' file

则不会打印第6和第8列

所以我们也可以用这个方法来抹去最后一列

awk '{$(NF)=""; print $0}' file

参考

Last updated