Awk 删除以最后一列为引用的列

Awk 删除以最后一列为引用的列,awk,sed,Awk,Sed,我希望删除倒数第三列和倒数第二列,并使用bash打印其余列。例如 Line 1 ------ A B C D E F G H I J K Line 2 ------ A B C D E F E F I G H I J M Line 3 ------ A B C D E I J Y Line 4 ------ A B C D A B C D F G J E F G H I J C 现在以最后一列作为参考($NF),我需要删除最后三列和最后二列 所需的输出应如下图所示,其中每行I J应被删除 Li

我希望删除倒数第三列和倒数第二列,并使用bash打印其余列。例如

Line 1 ------ A B C D E F G H I J K
Line 2 ------ A B C D E F E F I G H I J M
Line 3 ------ A B C D E I J Y
Line 4 ------ A B C D A B C D F G J E F G H I J C
现在以最后一列作为参考($NF),我需要删除最后三列和最后二列

所需的输出应如下图所示,其中每行I J应被删除

Line 1 ------ A B C D E F G H  K
Line 2 ------ A B C D E F E F I G H  M
Line 3 ------ A B C D E Y
Line 4 ------ A B C D A B C D F G J E F G H C

谢谢

您可以使用awk内部的
for
循环来完成此操作:

awk '{for(i=1;i<=NF;++i){if (i<NF-2||i==NF){printf i==NF?"%s\n":"%s ", $i}}}'
awk'{for(i=1;i这可能适合您(GNU-sed):


用每行的最后一个字段替换最后3个字段。

取决于您是否希望保留或折叠已删除字段周围的分隔符:

$ awk '{$(NF-2)=$(NF-1)=""}1' file
Line 1 ------ A B C D E F G H   K
Line 2 ------ A B C D E F E F I G H   M
Line 3 ------ A B C D E   Y
Line 4 ------ A B C D A B C D F G J E F G H   C

$ awk '{$(NF-2)=$(NF-1)=""; $0=$0; $1=$1}1' file
Line 1 ------ A B C D E F G H K
Line 2 ------ A B C D E F E F I G H M
Line 3 ------ A B C D E Y
Line 4 ------ A B C D A B C D F G J E F G H C

您在关于
…保留我的制表符分隔符的评论中说。如果您的字段是制表符分隔的,请在问题中说明,并添加
开始{FS=OFS=“\t”}
在脚本的开头。

谢谢,它工作得很好。它还保留了我的制表符分隔符。您尝试了什么?它是如何工作的。请用最佳尝试更新您的Q,以解决您的问题、当前输出和任何错误消息。祝您好运。
$ awk '{$(NF-2)=$(NF-1)=""}1' file
Line 1 ------ A B C D E F G H   K
Line 2 ------ A B C D E F E F I G H   M
Line 3 ------ A B C D E   Y
Line 4 ------ A B C D A B C D F G J E F G H   C

$ awk '{$(NF-2)=$(NF-1)=""; $0=$0; $1=$1}1' file
Line 1 ------ A B C D E F G H K
Line 2 ------ A B C D E F E F I G H M
Line 3 ------ A B C D E Y
Line 4 ------ A B C D A B C D F G J E F G H C