Debería ser grep -oE '[^ ]+$', desea ver la pestaña aquí debido al comportamiento del navegador, pero de todos modos, esto también considera los espacios de pestaña, o mejor aún, puede hacerlogrep -oE '[^[:space:]]+$'
Básicamente, invierte las líneas del archivo, luego las divide cutusando el espacio como delimitador, toma el primer campo que cutproduce y luego invierte el token nuevamente, usa tr -dpara eliminar caracteres no deseados ytr nuevamente para reemplazar los caracteres de nueva línea con,
Si bien este código puede responder a la pregunta, proporcionar un contexto adicional sobre por qué y / o cómo este código responde a la pregunta mejoraría significativamente su valor a largo plazo. Por favor, editar su respuesta a añadir un poco de explicación.
Respuestas:
Tratar
$ awk 'NF>1{print $NF}' file example. line. file.Para obtener el resultado en una línea como en su ejemplo, intente:
{ sub(/\./, ",", $NF) str = str$NF } END { print str }salida:
Bash puro:
$ while read line; do [ -z "$line" ] && continue ;echo ${line##* }; done < file example. line. file.fuente
$NF"?##o simplemente pruébelo en el shell.Puedes hacerlo fácilmente con grep:
grep -oE '[^ ]+$' file(
-Euse expresiones regulares extendidas; envíe-osolo el texto coincidente en lugar de la línea completa)fuente
grep -oE '[^ ]+$', desea ver la pestaña aquí debido al comportamiento del navegador, pero de todos modos, esto también considera los espacios de pestaña, o mejor aún, puede hacerlogrep -oE '[^[:space:]]+$'Puedes hacer algo como esto en awk:
awk '{ print $NF }'Editar: para evitar una línea vacía:
awk 'NF{ print $NF }'fuente
Otra forma de hacer esto en bash simple es haciendo uso del
revcomando de esta manera:cat file | rev | cut -d" " -f1 | rev | tr -d "." | tr "\n" ","Básicamente, invierte las líneas del archivo, luego las divide
cutusando el espacio como delimitador, toma el primer campo quecutproduce y luego invierte el token nuevamente, usatr -dpara eliminar caracteres no deseados ytrnuevamente para reemplazar los caracteres de nueva línea con,Además, puedes evitar al primer gato haciendo:
rev < file | cut -d" " -f1 | rev | tr -d "." | tr "\n" ","fuente
hay muchas maneras. como
awkmuestra Solutions, es la solución limpiaLa solución sed es eliminar cualquier cosa hasta el último espacio. Entonces, si no hay espacio al final, debería funcionar
sed 's/.* //g' <file>también puedes evitarlo
sedy dar unwhilevuelco.while read line do [ -z "$line" ] && continue ; echo $line|rev|cut -f1 -d' '|rev done < filelee una línea, la venera, corta la primera (es decir, la última en el original) y la restaura
lo mismo se puede hacer de una manera puramente bash
while read line do [ -z "$line" ] && continue ; echo ${line##* } done < filese llama expansión de parámetros
fuente
tldr;
$ awk '{print $NF}' file.txt | paste -sd, | sed 's/,/, /g'Para un archivo como este
el comando dado se imprimirá
Cómo funciona:
awk '{print $NF}': imprime el último campo de cada líneapaste -sd,: lee enstdinserie (-s, un archivo a la vez) y escribe campos delimitados por comas (-d,)sed 's/,/, /g':ssustituye","con", "globalmente (para todos los casos)Referencias:
fuente