corte a coluna 2 do arquivo de texto

6

Meu arquivo de texto não tem delimitador para especificar separadores apenas espaços, como recorto a coluna 2 para o arquivo de saída,

39    207  City and County of San Francisc   REJECTED          MAT = 0
78    412  Cases and materials on corporat   REJECTED          MAT = 0
82    431  The preparation of contracts an   REJECTED          MAT = 0

Portanto, a saída que preciso é

207
412
432
    
por riley 26.05.2016 / 23:21

4 respostas

5

É mais fácil com awk , que trata vários espaços consecutivos como um único, então

awk '{print $2}' file

imprime

207
412
431

Mas, obviamente, existem muitas outras ferramentas que farão o trabalho, mesmo que não sejam projetadas para tal tarefa como grep :

grep -Po '^[^ ]+[ ]+\K[^ ]+' file
    
por 26.05.2016 / 23:58
1

Use canais para enviar seus dados (por exemplo, cat columns.txt) para corte.

cat columns.txt | cut -d" " -f5

Nos dados de exemplo fornecidos, um delimitador de espaço único coloca os dados desejados no campo 5. Para enviar essa saída para outro arquivo, use o redirecionamento.

cat collumns.txt | cut -d" " -f5 > field2.txt

Usando o comando awk você poderia fazer algo como o abaixo, que reconhece automaticamente o campo que você está procurando porque há dados (?) Eu preciso aprender mais sobre o awk.

awk -F' ' '{print $2}' columns.txt
    
por 27.05.2016 / 00:03
0

Você ainda pode usar espaços únicos como seu delimitador, você só terá mais colunas. Aumente o valor que você dá para cut -d' ' -f de 2 a 5, ou talvez 6. Incremente o número até obter os resultados desejados.

    
por 26.05.2016 / 23:26
0

como @jimmij disse, awk '{print $2}' file é a resposta mais simples.

Se, por algum motivo, você não quiser usar awk e insistir em usar cut , poderá usar sed para converter cada instância de dois ou mais espaços em uma única guia ( cut delimitador padrão) antes de fazer o corte:

$ sed -e 's/  \+/\t/g' riley.txt | cut -f2 
207
412
431
    
por 27.05.2016 / 11:54