Por ejemplo, tengo un archivo:
$ cat file
i am the first example.
i am the second line.
i do a question about a file.
Y yo necesito:
example, line, file
Intento con "awk" pero el problema es que las palabras están en un espacio diferente
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
(
-E
use expresiones regulares extendidas; envíe-o
solo 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
rev
comando 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
cut
usando el espacio como delimitador, toma el primer campo quecut
produce y luego invierte el token nuevamente, usatr -d
para eliminar caracteres no deseados ytr
nuevamente 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
awk
muestra 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
sed
y dar unwhile
vuelco.while read line do [ -z "$line" ] && continue ; echo $line|rev|cut -f1 -d' '|rev done < file
lee 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 < file
se 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 enstdin
serie (-s
, un archivo a la vez) y escribe campos delimitados por comas (-d,
)sed 's/,/, /g'
:s
sustituye","
con", "
g
lobalmente (para todos los casos)Referencias:
fuente