Eu sei como selecionar um campo de uma linha usando o comando recortar. Por exemplo, dados os seguintes dados:
a,b,c,d,e
f,g,h,i,j
k,l,m,n,o
Este comando:
cut -d, -f2 # returns the second field of the input line
Devoluções:
b
g
l
Minha pergunta: como posso selecionar o segundo campo contando a partir do final? No exemplo anterior, o resultado seria:
d
i
n
shell
text-processing
cut
ssn
fonte
fonte
Respostas:
Inverta a entrada antes e depois
cut
comrev
:Saída:
fonte
cut
que não é possível obter índices de campo negativos (como Python).Tente fazer isso com o awk :
Ou usando perl :
Ou usando ruby (obrigado manatwork):
Ou usando
bash
(obrigado manatwork):Ou usando python :
fonte
bash
não precisa de contagem de coluna fixa para isso:while IFS=, read -ra d; do echo "${d[-2]}"; done < file.txt
.perl
comruby
.ruby
adicionado,bash
editado.-
ou (dependendo do ambiente, shell ou como o shell foi compilado), pode conter caracteres de barra invertida,echo
não é uma opção. Por que você precisa secat
contentarfile.txt
com nada antes de alimentá-lo parapython
!?. Você precisa emread -A
vez deread -a
dentroksh93
ezsh
. Subscritos negativos funcionam,zsh
mas apenas nas versões recentes deksh93
ebash
. Em versões mais antigas, você pode usar${d: -2:1}
${d[@]: -2:1}
na sua última frase.Usando sed:
Saída:
Explicação
([^,]*,)*
corresponde a qualquer número de caracteres que não sejam vírgulas, seguidos por vírgula, ou seja, qualquer número de colunas.([^,]*)
corresponde a uma coluna.(,[^,]*){1}
corresponde a uma coluna no final, se você alterar o quantificador{1}
para{2}
corresponder à segunda coluna no final etc.fonte