selecionando um campo quando você não pode contar desde o início [duplicado]

1

Eu tenho um arquivo longo (20000 + linhas) onde cada uma das linhas é uma descrição de um livro:

 book_number "title of the book" size type author_number

Onde o elemento entre aspas é uma string com aspas e as outras são números, exceto pelo tipo que é uma única palavra:

 23446 Raising Steam 537724 EPUB 4

Eu quero extrair todos os campos de tamanho, mas usando o corte você não pode usar números negativos para contar a partir da parte de trás do resultado da divisão com -d " " :

 cut -d " " -f -2 books.txt

Eu não posso contar a partir da frente, pois os livros podem ter qualquer número de espaços no título (eu não inventei esse formato, eu teria usado CSV ou JSON, o que exigia citações).

Estou perdendo alguma opção que permite usar cut ? O que mais eu poderia usar para obter o segundo antes do último campo com uma solução de uma linha?

    
por user59952 09.02.2014 / 13:00

1 resposta

1

Com python você pode fazer isso (note -3 ):

 python -c "for x in open('books.txt'): print x.split(' ')[-3]"

ou com awk :

 awk '{ print ( $(NF-2) ) }' books.txt
    
por 09.02.2014 / 13:03

Tags