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
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:
$ awk -f script.awk file
example, line, file,
Bash puro:
$ while read line; do [ -z "$line" ] && continue ;echo ${line##* }; done < file
example.
line.
file.
$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)
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 }'
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 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,
Además, puedes evitar al primer gato haciendo:
rev < file | cut -d" " -f1 | rev | tr -d "." | tr "\n" ","
hay muchas maneras. como awkmuestra Solutions, es la solución limpia
La 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 un whilevuelco.
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
tldr;
$ awk '{print $NF}' file.txt | paste -sd, | sed 's/,/, /g'
Para un archivo como este
$ cat file.txt
The quick brown fox
jumps over
the lazy dog.
el comando dado se imprimirá
fox, over, dog.
Cómo funciona:
awk '{print $NF}' : imprime el último campo de cada líneapaste -sd,: lee en stdinserie ( -s, un archivo a la vez) y escribe campos delimitados por comas ( -d,)sed 's/,/, /g': ssustituye ","con ", " globalmente (para todos los casos)Referencias: