Extrair substring de 'list' de strings

2

Eu tenho um arquivo com linhas com IDs e estou extraindo certas substrings de cada linha. Eu vi esta resposta , o que é ótimo, mas eu não sei como fazê-lo funcionar em cada linha . Eu acho que xargs deveria fazer parte disso, mas não tenho certeza.

Como exemplo, tenho isto:

1234 0001 1234
9737 0002 1234
28399 0003 1235
8279 0004 1234

(Reencaminhado para maior clareza)

E eu quero para cada linha acima para extrair isso:

0001
0002
0003
0004

Agora eu sei que se uma das linhas for $line_one , eu posso usar echo ${line_one: -8:4} para pegar os 4 primeiros caracteres dos últimos 8 caracteres. Mas eu tenho as linhas saindo do comando anterior (que é algo como cut -d "|" f1 , (eu acho, eu não estou no PC que tem o arquivo em questão, e esse PC não tem internet)). O que estou imaginando é um mundo onde eu possa executar isso:

cut -d "|" -f1 | xargs echo ${xargs_line: -8:4}

Para obter minha saída ...

Isso é possível? Se sim, como?

    
por Pureferret 28.08.2013 / 11:27

2 respostas

2
cut -d "|" -f1 | while read line; do echo ${line: -8:4}; done
    
por 28.08.2013 / 11:44
3

Você pode fazer tudo com apenas awk :

$ awk -F'|' '{print substr($1,length($1)-7, 4)}' f1

Exemplo

Exemplo de arquivo de dados f1 :

$ cat f1
123400011234|blah|blah
973700021234|blah|blah
2839900031235|blah|blah
827900041234|blah|blah

A execução do comando produz isso:

$ awk -F'|' '{print substr($1,length($1)-7, 4)}' f1
0001
0002
0003
0004
    
por 28.08.2013 / 12:14