打印第一列

打印第一列

我想打印此文件的第 1 列。我使用了此命令:awk '{print $1}'但它只打印了第 1 列的第一个单词。

数据

ABC transporters                             ABC transporters
Alanine, aspartate and glutamate metabolism  Alanine, aspartate 
alpha-Linolenic acid metabolism              alpha-Linolenic acid metabolism
Aminoacyl-tRNA biosynthesis                  Aminoacyl-tRNA biosynthesis
Amino sugar and nucleotide sugar metabolism  Amino sugar and nucleotide
Arachidonic acid metabolism                  Arachidonic 

输出:

ABC
Alanine,
alpha-Linolenic
Aminoacyl-tRNA
Amino
Arachidonic

期望输出:

ABC transporters
Alanine, aspartate and glutamate metabolism
alpha-Linolenic acid metabolism 
Aminoacyl-tRNA biosynthesis 
Amino sugar and nucleotide sugar metabolism 
Arachidonic acid metabolism 

答案1

我可以看到您的列由两个空格分隔。

因此awk

awk -F '\\s\\s' '{print $1}'

答案2

由于这似乎是固定宽度的列,因此您只需输入cut相应的字符即可。最宽的列Alanine, aspartate and glutamate metabolism似乎是 44 个字符宽,因此:

$ cut -c1-44 foo
ABC transporters
Alanine, aspartate and glutamate metabolism
alpha-Linolenic acid metabolism
Aminoacyl-tRNA biosynthesis
Amino sugar and nucleotide sugar metabolism
Arachidonic acid metabolism

答案3

由于第二列明显重复了第一列的开头,我以此作为切割的标准sed,因此它不依赖于列宽:

sed 's/^\(.*\)\(.*\) \1$/\1\2/'

第一个模式是重复的部分,在行\1尾处反向引用。;s/ *$//如果它们困扰您,您可以添加以删除尾随空格。

答案4

根据 muru 的回答,列的宽度是固定的,使用egrep带选项的命令-o将允许您仅打印由搜索模式指定的匹配行的匹配(非空)部分。但是,默认情况下,将打印整行。

$ egrep -o "^.{44}" foo

相关内容