cut -d "|" -f1 | while read line; do echo ${line: -8:4}; done
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?
Você pode fazer tudo com apenas awk
:
$ awk -F'|' '{print substr($1,length($1)-7, 4)}' f1
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
Tags text-processing shell