我有一个制表符分隔的file
样子:
$ cat file
GCF_000014165.1_ASM1416v1.dist_nbr_anntn WP_011558474.1 1155234 1156286 polyketide synthase [Mycobacterium]
GCF_000014165.1_ASM1416v1.dist_nbr_anntn WP_011558475.1 1156298 1156807 12 carboxyl methyltransferase [Mycobacterium]
GCF_000014165.1_ASM1416v1.dist_nbr_anntn WP_011558476.1 1156804 1157820 -3 oxidoreductase [Mycobacterium]
其中1155234
,1156286
,1156298
,1156807
,1156804
和 1157820
后面是标签(即,有在文件中没有空格,除了在第6个(最后一个)列)。我想0
在第五列添加一个选项卡,并将第一行第六列末尾的选项卡替换为一个空格。输出如下:
GCF_000014165.1_ASM1416v1.dist_nbr_anntn WP_011558474.1 1155234 1156286 0 polyketide synthase [Mycobacterium]
GCF_000014165.1_ASM1416v1.dist_nbr_anntn WP_011558475.1 1156298 1156807 12 carboxyl methyltransferase [Mycobacterium]
GCF_000014165.1_ASM1416v1.dist_nbr_anntn WP_011558476.1 1156804 1157820 -3 oxidoreductase [Mycobacterium]
如何使用awk或sed进行操作?
您的答案基本上可以满足您的要求,但可以改进。
您要在合理范围内尽量减少(简单)命令的数量和管道的数量。如果拥有的数量过多,可能会导致效率低下。您不会在五行或十行的文件中注意到它,但是,当您处理一百万行的文件时,它会有所作为。
您不需要运行两个sed
命令(一个通过管道传递到另一个)。你可以做
sed的-e ' (第一 小号 命令) ' -e ' (第二 小号 命令) '或者
sed的' (第一 小号 命令) ; (第二 小号 命令) '
s/\t/ /
命令也应加上前缀1
。s/…/…/6g
未定义行为。由于您只希望s/\t/ /
完成一次(在第6个标签上),因此您应该只说一次s/\t/ /6
(不带g
)。所以你的命令可能是
sed'1s / \ t / \ t0 \ t / 4; 1s / \ t / / 6'文件
大括号可让您将要完成的命令组合在一起。所以你也可以说
sed'1 {s / \ t / \ t0 \ t / 4; s / \ t / / 6}”文件
您可以在awk中执行以下操作:
awk -F'\ t'-v OFS ='\ t''NR == 1 {$ 6 = $ 5“” $ 6; $ 5 =“ 0”} {打印} '文件
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句