使用awk或cut命令重新排列列

cha*_*has 1 awk cut

我有1000列的大文件.我想重新排列,以便最后一列应该是第3列.我用过这个,

cut -f1-2,1000,3- file > out.txt
Run Code Online (Sandbox Code Playgroud)

但这不会改变秩序.

任何人都可以帮助使用cut或awk吗?

另外,我想重新排列第10列和第11列,如下所示:

例:

1   10   11   2   3   4   5   6   7   8   9   12  13  14  15  16  17  18  19  20
Run Code Online (Sandbox Code Playgroud)

Ken*_*ent 9

尝试这个awk单行:

awk '{$3=$NF OFS $3;$NF=""}7' file
Run Code Online (Sandbox Code Playgroud)

这是将最后一个col移动到第3列.如果你有1000,那么它用1000th col.

编辑

如果文件是制表符分隔的,您可以尝试:

awk -F'\t' -v OFS="\t" '{$3=$NF OFS $3;$NF=""}7' file
Run Code Online (Sandbox Code Playgroud)

EDIT2

添加一个例子:

kent$  seq 20|paste -s -d'\t'                              
1   2   3   4   5   6   7   8   9   10  11  12  13  14  15  16  17  18  19  20

kent$  seq 20|paste -s -d'\t'|awk -F'\t' -v OFS="\t" '{$3=$NF OFS $3;$NF=""}7'
1   2   20  3   4   5   6   7   8   9   10  11  12  13  14  15  16  17  18  19  
Run Code Online (Sandbox Code Playgroud)

EDIT3

您没有提供任何输入示例.所以假设您在原始文件中没有空列.(没有连续的多标签):

kent$  seq 20|paste -s -d'\t'|awk -F'\t'  -v OFS="\t" '{$3=$10 FS $11 FS $3;$10=$11="";gsub(/\t+/,"\t")}7'
1       2       10      11      3       4       5       6       7       8       9       12      13      14      15      16      17      18      19      20
Run Code Online (Sandbox Code Playgroud)

毕竟我们可以在循环中打印这些字段.