首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用awk或cut命令重新排列列

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

Stack Overflow用户
提问于 2013-07-29 11:26:31
回答 4查看 9.3K关注 0票数 2

我有1000列的大文件。我想重新排列,以便最后一栏应该是第三栏。我用过的FOr,

代码语言:javascript
复制
cut -f1-2,1000,3- file > out.txt

但这并没有改变秩序。

有人能帮我用刀子或锥子吗?

此外,我希望重新排列第10和11栏,如下所示:

示例:

代码语言:javascript
复制
1   10   11   2   3   4   5   6   7   8   9   12  13  14  15  16  17  18  19  20
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-07-29 11:33:52

试试看这个awk单衬里:

代码语言:javascript
复制
awk '{$3=$NF OFS $3;$NF=""}7' file

这是把最后一杯调到第三杯。如果你有1000,那它就用1000分之一。

编辑

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

代码语言:javascript
复制
awk -F'\t' -v OFS="\t" '{$3=$NF OFS $3;$NF=""}7' file

EDIT2

增加一个例子:

代码语言:javascript
复制
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  

EDIT3

你没有给出任何输入的例子。因此,假设原始文件中没有空列。(没有连续的多个标签):

代码语言:javascript
复制
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

毕竟,我们可以在一个循环中打印这些字段。

票数 10
EN

Stack Overflow用户

发布于 2013-07-29 14:00:20

你想要的是:

代码语言:javascript
复制
awk 'BEGIN{FS=OFS="\t"} {$3=$NF OFS $3; sub(OFS "[^" OFS "]*$","")}1' file

这可能也适用于您,这取决于您的awk版本:

代码语言:javascript
复制
awk 'BEGIN{FS=OFS="\t"} {$3=$NF OFS $3; NF--}1' file

没有该部分后的分号,您将有尾随标签在您的输出。

票数 2
EN

Stack Overflow用户

发布于 2017-04-28 09:21:24

由于许多人都在寻找这种方法,而且即使是最好的awk解决方案也不太好用,所以我想发布用Python编写的解决方案(mycut):

代码语言:javascript
复制
#!/usr/bin/env python3

import sys
from signal import signal, SIGPIPE, SIG_DFL
signal(SIGPIPE,SIG_DFL)

#example usage: cat file | mycut 3 2 1

columns = [int(x) for x in sys.argv[1:]]
delimiter = "\t"

for line in sys.stdin:
    parts = line.split(delimiter)

    print("\t".join([parts[col] for col in columns]))

我考虑添加剪切的其他特性,比如更改分隔符和使用*打印remaning列的特性。但这样它就会有自己的页面。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17922805

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档