Con Firefox o Google Chrome, abra las herramientas para desarrolladores (, haga clic con el botón derecho en la página y elija inspeccionar )y luego seleccione la pestaña de red.
Asegúrese de que está registrando las solicitudes y luego inicie sesión normalmente en la página. Desplácese por las solicitudes de red que se registraron (, probablemente habrá muchas )hasta que encuentre la que desea volver a crear. Haga clic derecho en la solicitud y seleccione copiar como curl.
Esto copiará un comando curl en el portapapeles de su sistema que debería poder pegar directamente en su shell recreando la solicitud exacta que hizo el navegador para las cookies, los encabezados y los parámetros de consulta.
Если гарантированно, что ключи и значения будут чисто буквенно-цифровыми, что-то вроде этого может сработать:
declare -A output
make_list() {
local IFS=" "
declare -A keys # variables declared in a function are local by default
for i in "${THE_LIST[@]}"
do
i=${i//\'/} # since everything is alphanumeric, the quotes are useless
declare -a keyvals=($i) # split the entry, filename expansion isn't a problem
key="${keyvals[0]}" # get the first value as the key
keys["$key"]=1 # and save it in keys
for val in "${keyvals[@]:1}"
do # for each value
declare -A "$key[$val]=1" # use it as the index to an array.
done # Duplicates just get reset.
done
for key in "${!keys[@]}"
do # for each key
declare -n arr="$key" # get the corresponding array
output["$key"]="${!arr[*]}" # and the keys from that array, deduplicated
done
}
make_list
declare -p output # print the output to check
При вводе примера я получаю этот вывод:
declare -A output=([item1]="data3 data2 data1" [item2]="data4" )
Элементы данных не по порядку, но дедуплицированы.
Вместо этого лучше использовать Python с модулем csv
.
Если ни в одном из значений нет пробелов, это решение может сработать. Используйте ассоциативные массивы awk
для создания команд declare -A
.
#!/bin/bash
THE_LIST=(
"'item1' 'data1 data2'"
"'item1' 'data2 data3'"
"'item2' 'data4'"
)
eval "$(\
for i in "${THE_LIST[@]}"; do
row=($(eval echo $i))
echo "${row[@]}"
done | awk '{ for (i=2; i<=NF; i++) if (seen[$1] !~ $i) { seen[$1]=seen[$1]$i" " } }
END { for (s in seen) print "declare -A new_list["s"]=\""seen[s] }' | sed 's/[[:space:]]*$/"/'
)"
for i in "${!new_list[@]}"; do
echo "$i: ${new_list[$i]}"
done
Это печатает:
item2: data4
item1: data1 data2 data3
Порядок значений сохраняется, но порядок ключей изменяется. Я не мог понять, как обрезать конечный пробел записи массива в awk
, поэтому я просто использовал sed
, чтобы заменить его кавычкой, но для начала это уже полный хак.