br comando para considerar os primeiros 10 dígitos da última coloumn

0

Eu tenho um arquivo para, por exemplo, com três colunas

12345678910 14567855858855 12345678510750078

Eu quero considerar apenas os 10 primeiros dígitos da terceira coluna com sed ou awk.

A saída esperada

é:

1234567851

Por favor ajude

    
por ltps 02.10.2016 / 08:11

4 respostas

0

Você pode tentar:

awk '{ print $3; }' subject.txt | sed -n 's/\([0-9]\{10\}\).*//p'
    
por 02.10.2016 / 10:20
1

Este comando sed fornecerá os primeiros 10 dígitos da última coluna.
Sua pergunta é um pouco confusa em termos de primeiro ou último 10 ou 14 dígitos :-)
Mas, você pode ajustar da mesma forma neste exemplo.

$ echo "12345678910 14567855858855 12345678510750078" \ 
| sed -n 's/.*\s\([0-9]\{10\}\)[0-9]*$// p'

1234567851

Interpretando o comando (para que você possa modificá-lo conforme necessário).

 sed -n 's/.*\s\([0-9]\{10\}\)[0-9]*$// p'
     |   | | | | |          | |       |   ^ print what remains on the matched line
     |   | | | | |          | |       ^^ replace the line with the part of interest
     |   | | | | |          | ^^^^^^^ match for the last column
     |   | | | | |          ^^ mark the end of part we want to print
     |   | | | | ^^^^^^^^^^^ this will match 10 digits at the start of the last column
     |   | | | ^^ start marking the part we want to print
     |   | | ^ start matching the digits after a white-space char
     |   | ^^ pattern begins matching everything up to the part of interest
     |   ^ process only lines that match the given pattern
     ^^ do not print the original input string

Você pode ajustar isso para seus dados.
Tal como está, devido à parte [0-9]*$ desta regra, espera-se que os seus dados não tenham espaços em branco ou caracteres não numéricos depois ou dentro da última coluna.

Atualize seu comentário.
Enquanto este exemplo usa um eco de sua linha única para demonstrar seu caso de teste,
Você pode disparar o comando em todo o seu arquivo da seguinte forma,

cat input-file.txt | <sed-command-above> > output-file.txt

ou

<sed-command-above> input-file.txt > output-file.txt

O primeiro formulário mostra como um echo funcionará para todo o arquivo de várias linhas também. Você também pode fazer um pequeno teste com um head input-file.txt canalizado para o comando sed para ver como ele funciona nas primeiras 10 linhas do arquivo de entrada.

    
por 02.10.2016 / 09:35
0

Perl para o resgate:

perl -lne 'print /(\d{10})\d*$/' < filename
  • -n lê a linha de entrada por linha
  • -l adiciona novas linhas à saída
  • $ corresponde ao fim da linha, os primeiros 10 dígitos precedendo quaisquer outros dígitos antes do final serem capturados, e /.../ no contexto de lista imposto por print retorna que
por 02.10.2016 / 08:41
0

Se você soltar apenas a solução sed, tente:

cat /tmp/textfile |  sed -n -e '$!d;s/.*\s\([0-9]\{10\}\)[0-9]*$// p'

o substituto funcionou apenas na última linha.

    
por 02.10.2016 / 11:27

Tags