una resueltos programacion matriz matrices llenar extraer elementos ejercicios crear columna cambiar agregar arrays bash command-substitution

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"