Sé cómo seleccionar un campo de una línea usando el comando de corte. Por ejemplo, dados los siguientes datos:
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
Devoluciones:
b
g
l
Mi pregunta: ¿Cómo puedo seleccionar el segundo campo contando desde el final? En el ejemplo anterior, el resultado sería:
d
i
n
Respuestas:
Invierta la entrada antes y después
cut
conrev
:Salida:
fuente
cut
que no pueda tomar índices de campo negativos (como Python).Intenta hacer esto con awk :
O usando perl :
O usando ruby (gracias manatwork):
O usando
bash
(gracias manatwork):O usando python :
fuente
bash
No necesita recuento columna fija para esto:while IFS=, read -ra d; do echo "${d[-2]}"; done < file.txt
.perl
conruby
.ruby
agregado,bash
editado.-
o (según el entorno, el shell o cómo se compiló el shell), puede contener caracteres de barra invertida, entoncesecho
no es una opción. ¿Por qué necesitascat
conatearfile.txt
con nada antes de alimentarlopython
? Necesitas enread -A
lugar deread -a
enksh93
yzsh
. Los subíndices negativos funcionanzsh
pero solo en versiones recientes deksh93
ybash
. En versiones anteriores, puede usar${d: -2:1}
${d[@]: -2:1}
a tu última oración.Usando sed:
Salida:
Explicación
([^,]*,)*
coincide con cualquier número de caracteres que no sean comas seguidos de una coma, es decir, cualquier número de columnas.([^,]*)
coincide con una columna(,[^,]*){1}
coincide con una columna al final, si cambia el cuantificador{1}
para{2}
que coincida con la segunda columna del extremo etc.fuente