arrays - resueltos - ¿Cómo asigno la salida de un comando a una matriz?
matrices en matlab ejercicios resueltos (2)
Para asignar la salida a una matriz, necesita usar una sustitución de comando dentro de una asignación de matriz.
arr=($(grep -n "search term" file.txt | sed ''s/:.*//''))
El interior $ () ejecuta el comando mientras que outer () hace que la salida sea una matriz. El problema con esto es que no funcionará con los archivos que contienen espacios. Para manejar esto, puede establecer IFS en / n.
IFS=$''/n''
arr=($(grep -n "search term" file.txt | sed ''s/:.*//''))
unset IFS
También puede eliminar la necesidad de sed realizando una expansión en cada elemento de la matriz:
arr=($(grep -n "search term" file.txt))
arr=("${arr[@]%%:*}")
Necesito asignar los resultados de un grep
a una matriz ... por ejemplo
grep -n "search term" file.txt | sed ''s/:.*//''
Esto dio como resultado un grupo de líneas con números de línea en los que se encontró el término de búsqueda.
1
3
12
19
¿Cuál es la forma más fácil de asignarlos a una matriz de bash? Si simplemente los asigno a una variable, se convierten en una cadena separada por espacios.
Las cadenas separadas por espacios son fácilmente transitables en bash.
# save the ouput
output=$(grep -n "search term" file.txt | sed ''s/:.*//'')
# iterating by for.
for x in $output; do echo $x; done;
# awk
echo $out | awk ''{for(i=1;i<=NF;i++) print $i;}''
# convert to an array
ar=($out)
echo ${ar[3]} # echos 4th element
si estás pensando en el espacio en el nombre de archivo, usa find . -printf "/"%p/"/n"
find . -printf "/"%p/"/n"