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
cutconrev:Salida:
fuente
cutque 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
bashNo necesita recuento columna fija para esto:while IFS=, read -ra d; do echo "${d[-2]}"; done < file.txt.perlconruby.rubyagregado,basheditado.-o (según el entorno, el shell o cómo se compiló el shell), puede contener caracteres de barra invertida, entoncesechono es una opción. ¿Por qué necesitascatconatearfile.txtcon nada antes de alimentarlopython? Necesitas enread -Alugar deread -aenksh93yzsh. Los subíndices negativos funcionanzshpero solo en versiones recientes deksh93ybash. 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