我有1000列的大文件。我想重新排列,以便最后一栏应该是第三栏。我用过的FOr,
cut -f1-2,1000,3- file > out.txt但这并没有改变秩序。
有人能帮我用刀子或锥子吗?
此外,我希望重新排列第10和11栏,如下所示:
示例:
1 10 11 2 3 4 5 6 7 8 9 12 13 14 15 16 17 18 19 20发布于 2013-07-29 11:33:52
试试看这个awk单衬里:
awk '{$3=$NF OFS $3;$NF=""}7' file这是把最后一杯调到第三杯。如果你有1000,那它就用1000分之一。
编辑
如果该文件是制表符分隔的,则可以尝试:
awk -F'\t' -v OFS="\t" '{$3=$NF OFS $3;$NF=""}7' fileEDIT2
增加一个例子:
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
你没有给出任何输入的例子。因此,假设原始文件中没有空列。(没有连续的多个标签):
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毕竟,我们可以在一个循环中打印这些字段。
发布于 2013-07-29 14:00:20
你想要的是:
awk 'BEGIN{FS=OFS="\t"} {$3=$NF OFS $3; sub(OFS "[^" OFS "]*$","")}1' file这可能也适用于您,这取决于您的awk版本:
awk 'BEGIN{FS=OFS="\t"} {$3=$NF OFS $3; NF--}1' file没有该部分后的分号,您将有尾随标签在您的输出。
发布于 2017-04-28 09:21:24
由于许多人都在寻找这种方法,而且即使是最好的awk解决方案也不太好用,所以我想发布用Python编写的解决方案(mycut):
#!/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列的特性。但这样它就会有自己的页面。
https://stackoverflow.com/questions/17922805
复制相似问题