Imprime a primeira coluna

5

Eu quero imprimir a coluna 1 deste arquivo. Eu usei este comando: awk '{print }' , mas ele imprimiu a primeira palavra da primeira coluna.

DATA

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 

Saída:

ABC
Alanine,
alpha-Linolenic
Aminoacyl-tRNA
Amino
Arachidonic

Saída desejada:

ABC transporters
Alanine, aspartate and glutamate metabolism
alpha-Linolenic acid metabolism 
Aminoacyl-tRNA biosynthesis 
Amino sugar and nucleotide sugar metabolism 
Arachidonic acid metabolism 
    
por Rhea 16.05.2017 / 09:24

4 respostas

13

O que eu posso ver é que suas colunas são delimitadas por dois espaços.

com awk :

awk -F '\s\s' '{print }'
    
por Ravexina 16.05.2017 / 10:43
14

Como esta parece ser uma coluna de largura fixa, você pode apenas cut dos caracteres correspondentes. A coluna mais larga Alanine, aspartate and glutamate metabolism parece ter 44 caracteres de largura, portanto:

$ 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
    
por muru 16.05.2017 / 09:28
2

Como a segunda coluna obviamente repete o início da primeira coluna, considero isso como critério para o corte com sed , portanto, não depende da largura da coluna:

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

O primeiro padrão é a parte repetida, com backreferenced como no final da linha. Você pode adicionar ;s/ *$// para remover os espaços à direita se eles incomodarem você.

    
por Philippos 16.05.2017 / 10:54
1

Com base na resposta de muru que a coluna é especificada com largura fixa, o comando egrep com a opção -o permitirá que você imprima apenas as partes correspondentes (não vazias) de uma linha correspondente especificada pelo padrão de pesquisa. Por padrão, no entanto, toda a linha será impressa.

$ egrep -o "^.{44}" foo
    
por dd_rookie 16.05.2017 / 10:25